立即执行函数 函数声明中变量用var 和不用var声明

本文探讨JavaScript中的变量作用域,通过一个例子解释立即执行函数(IIFE)内部var声明的变量与未声明变量的区别。强调了在函数内部使用var声明的变量为局部变量,而未使用var的变量会成为全局对象的属性。分析了两种情况下的输出结果,并指出变量声明的不可删除属性。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近也是碰到一些面试题,就涉及到一些函数内部声明的变量求输出打印出什么,有极个别的特别的一点还是不是很清楚,特地研究了一下。

一、下面代码输出什么?

var a = 10;
(function () {
console.log(a); ----------------12行输出
a = 5;
console.log(window.a); ----------------14行输出
var a = 20;
console.log(window.a); ----------------16行输出
console.log(a); ----------------17行输出
})();
console.log(a); ----------------19行输出
console.log(window.a); ----------------20行输出

还请小思考一下,我一开始的错误出现在第二个打印 会认为输出打印5,结果却是。。。

在这里插入图片描述
以上代码结果为:
造成结果还是因为立即执行函数是一个局部作用域,var声明的会声明提前,造成里面的同一个变量为局部变量,所以在里面一切用window.打印的都为全局对象上面的对应的值

二、分析思考引出函数内部用var声明的变量和不用var声明的变量

1。立即执行函数 函数声明函数的区别

``

2。在函数内部用var声明的变量为局部变量 不用var严格来说不是为全部变量,而是看当前作用域直至顶层对象添加属性

var a = 10;
(function () {
console.log(a);
a = 5;
console.log(window.a);
console.log(a);
})();
console.log(a);
console.log(window.a);

而这上面的代码不会有这个问题,输出打印结果为:
在这里插入图片描述
是因为没有var在立即函数内部声明同一个变量,更不会有声明提前,但是并不是说在函数内部没用var声明的变量就是全局变量了,它并不是声明了一个全局变量,而是创建了一个全局对象的属性。Javascript的变量声明、创建属性以及每个Javascript中的每个属性都有一定的标志说明它们的属性----如只读(ReadOnly)不可枚举(DontEnum)不可删除(DontDelete)等等。

由于变量声明自带不可删除属性,比较var a = 10 跟 a = 5,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值