你理解错了有无var声明的区别

接近毕业年,学习前端也好一段时间了,最近又把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声明变量主要的作用会提升变量的执行上下文环境,也就是作用域,让它达到上一层的作用域,并不是将它变成了全局变量,而 那些说它的作用是全局变量的其实只是嵌套了一层函数然后就下了结论,是错误的结论,看来什么东西还是得多尝试尝试,没什么是肯定正确的,当然本文有不同看法也可以提出来共同解决;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值