关于javaScript中的全局变量和成员变量以及this在函数中的作用域问题?求教

JavaScript019

关于javaScript中的全局变量和成员变量以及this在函数中的作用域问题?求教,第1张

所有的变量都应用var声明,只是习惯。不声明,也没事,只是js的解释器,帮你声明了,但是并不是所有的解释器会这么做,有些解释器会认为不声明就是错的。

至于你说的第一点:

name是系统保留字段,你用的浏览器保留了这个name变量。当你访问name的时候,实际访问的是this.name等价于window.name,这是浏览器的窗口的名字属性。原本就存在的。所以你显示的是"",而不是undefined。如果你把name变一个其他的名字,比如alert(miaoxiaoer)那么你就会显示undefined了,或者报错了。因为没声明变量啊。

第二点:

(function 这种形式通常用来划定一个命名空间,关于命名空间是干吗用的你可以百度详细一下。简单来说就是画一个圈圈,让圈圈内的变量和圈圈外的变量无安全隔离开,不能互相访问。所以你才会出现你的第二个alert变量a显示undefined,因为a在命名空间外被隔离了。

为什么(function 会隔离变量呢?答案就是第一个括号告诉系统,我这里有个没有名字的函数,下面的function会被当作参数传给这个函数。代码编写者利用参数不能访问函数外部的特性,来实现了js的命名空间的隔离效果。

this的范围:

在函数中,如果你的函数是在全局变量声明的。那this就是指代全局,在浏览器中通常就是window对象。

而如果你的this是在一个对象中,比如你声明了一个json对象,而json内的一个函数调用了this,那么这个this就是这个对象,而不是全局对象。

比如你在box函数后,加上这段代码:

var b ={}

b.box = box

b.box()

这时候输出的this就是对象了,另外在apply 和 new对象的时候,也会把被new的对象传递给this,懂了吗?

js中let和var定义变量的区别,主要体现在作用于的不同。

var定义的变量是全局变量或者函数变量。

let定义的变量是块级的变量。

例如:

while(1){

let let1 = 2

var var1 = 2

}

alert(let1) //不可访问

alert(var1) //可以访问

也就是说,let只对它所在的最内侧块内有效,而var的范围至少是一个函数之内。