接近毕业年,学习前端也好一段时间了,最近又把js挖出来学了学,什么原型,作用域,执行上下文,但是本文与这些大方面无关,只是讲一个小的知识点,关于var声明的理解;
有些博客讲,不带var的变量就相当于是在全局声明一个变量,而本文就是为了推翻这个谬论而产生的,如果你已经明白这句话是错的那么就完全没有必要再看本文章了;
老规矩,先上代码,先掌握一个常规小知识
function haha(){
t = 10;
}
console.log(t);//Uncaught ReferenceError: t is not defined
一般我们理解全局变量会首先声明,这里在函数里没有用var的变量并没有在全局中声明,打印出来并没找到该函数
老规矩,继续上代码
function haha(){
t = 10;
}
haha();
console.log(window.t)//10
console.log(t);//10
这段执行函数,变量t出现在了window全局对象中,这个时候大家就会说那这变量可不就是声明全局变量嘛
我只能说非也,继续上代码
function haha(){
var t = 4;
(function(){
t = 6;
})()
console.log(t);//6
}
haha();
console.log(window.t)//undefined
console.log(t);//Uncaught ReferenceError: t is not defined
这次在函数中再定义了一个函数,然后给定一个不带var的变量,第一层haha的函数变量改变,但是全局中却不存在t这个变量;
好了上述这么多代码有没有仔细看其实也不重要,重点是你看得懂接下来的这句话
不用var声明变量主要的作用会提升变量的执行上下文环境,也就是作用域,让它达到上一层的作用域,并不是将它变成了全局变量,而 那些说它的作用是全局变量的其实只是嵌套了一层函数然后就下了结论,是错误的结论,看来什么东西还是得多尝试尝试,没什么是肯定正确的,当然本文有不同看法也可以提出来共同解决;