JS之变量声明与window对象的关系

话不多说,我们先看代码:

	function f (){
		fff = 999;
	}
	f();
	console.log(fff);

我们定义了一个名为 f 的函数,函数内没有对变量进行声明,直接给 fff 变量进行了赋值,并且在外部调用了 f 函数,我们输出一下 fff 的变量,大家猜一下代码效果如何:
在这里插入图片描述
它可以正常输出。。。
我们再看另一段代码:

	function f (){
		var fff = 999;
	}
	f();
	console.log(fff);

这段代码不同的地方是,在函数体内我们按规定对变量进行了声明。那么这段代码的效果是:
在这里插入图片描述
fff is not defined
奇了怪了是吧,我规规矩矩的声明变量倒不行,不声明直接赋值,竟然可以在函数外使用函数内的变量,这似乎不符合我们的认知,那么问题出在了哪里?
首先我们知道JavaScript中有一个内置对象是window,所有在脚本中(没有在函数的范围内)通过var定义的变量,都挂在window对象上,在任意位置,一个变量的赋值都可以看做是在window上寻找这个变量。
我们实测一下:

	var aaa = 777;
	console.log(window)

在这里插入图片描述
果不其然,我们在window对象中找到了这个变量。

	function f (){
		fff = 999;
	}

这段代码在解析的时候,它会把 fff = 999,当做是window.fff = 999。
所以这个函数通过外部调用之后,可以在函数外使用函数内的变量,因为这个变量已经挂在了window对象上。

	function f (){
		fff = 999;
	}
	f();
	console.log(window)

在这里插入图片描述

function f (){
	window.fff = 999;
}
f();
console.log(window)

在这里插入图片描述
经过我们的测试,实际效果和预期一样。
这个问题之前当过面试题,这是一种很危险的做法,很容易导致程序出现问题,所以我们在定义变量时一定不要忘记写var,尤其是函数内,不然会制造出一些意想不到的bug。我们要尽量避免这种情况的发生,并且如何面试时被问到,要知道这个问题是什么情况。
有问题可以联系QQ:505417246
关注下面微信公众号,可以领取微信小程序、Vue、TypeScript、前端、uni-app、全栈、Nodejs等实战学习资料
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CreatorRay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值