js基础var
- 定义变量带var和不带var的区别,相当于是一个变量
console.log(a);//undefine var a = 12; console.log(a);//a=12 console.log(window.a)//→window['a']
顺便也在全局作用域中,相当于给全局对象window增加了一个属性名
- 不带var,它就是window的一个属性
console.log(a) //报错,uncaught exception a = 12; console.log(a);//12 console.log(window.a)//12
- 以后你是创建变量,最好带var
- 在私有作用域中,带var和不带var
- 带var
function fn(){ console.log(a);//undifine var a = 12; console.log(a);//12 } console.log(a);//报错 refrence error.a not defined
在私有作用域中,没有类似window.a。 它就是私有作用域的一个变量
- 不带var
function fn(){ a = 12; console.log(a); // 12 } fn(); console.log(a);//12
- 作用域链
- 函数执行形成一个私有的作用域,有一个保护机制,可以保护私有变量,但是进入到私有作用域当中,首先变量提升(声明过的变量是私有的,没有声明过的就不是私有的),接下来代码执行,如果遇到一个私有变量,那么按照私有处理即可;如果遇到变量不是私有的,需要向它的上级作用域进行查找(上一级如果也没有,则继续向上找,一直找到window全局作用域止),我们把这种查找机制叫做“作用域链”
- 如果上一级作用域有, 我们操作的都是上一级作用域的变量(假如我们在当前作用域值修改了,同时也就把上一级作用域的值给修改了)
- 如果上一级作用域没这个变量(找到window也没有),分两种情况:
- 1)变量=值,相当于给上一级作用域(一般都是window)设置了一个属性,以后再操作window下就有了
- 2)alert(变量) ,想要输出这个变量,所有会报错
- 函数执行形成一个私有的作用域,有一个保护机制,可以保护私有变量,但是进入到私有作用域当中,首先变量提升(声明过的变量是私有的,没有声明过的就不是私有的),接下来代码执行,如果遇到一个私有变量,那么按照私有处理即可;如果遇到变量不是私有的,需要向它的上级作用域进行查找(上一级如果也没有,则继续向上找,一直找到window全局作用域止),我们把这种查找机制叫做“作用域链”
- 带var
Dana.Lee
To:Dana_Lee1016@126.com