Var 变量会被提升到 IIFE 之外吗?
Does Var variables get hoisted out of the IIFE?
我有一段代码,我想确切地知道 运行 顺序以及为什么结果是这样的:
var variable = 10;
(()=>{
variable_3 = 35;
console.log(variable_3);
var variable_3 = 45;
variable_2 = 15;
console.log(variable);
})();
console.log(variable_2);
console.log(variable_3);
var variable=30;
这段代码的输出是
35, 10, 15, Error
我的理解是:
- 在 IIFE 中,我们创建了一个全局 variable_3 并分配了 35.
- 然后打印出35。
- 我们在IIFE中创建了一个Varvariable_3并分配了45。(这个Var是从IIFE中吊出来的吗??)
35.10.15 我明白了,你能解释一下最后一个数字,让我的逻辑正确吗?
谢谢!
(()=> {
a = 123;
console.log(a); // 123
console.log(window.a); // undefined
var a;
})();
(()=>{
var a = 4;
(()=>{
console.log(a); // undefined
var a = 5;
})()
})()
(()=>{
var source = {};
(()=>{
a = source;
var a;
console.log(a === source) // true
// The variable source is indeed assigned to variable a, although variable a is declared after
})()
})()
var变量是一个定义
喜欢功能,
函数可以在定义前使用;
main();
function main(){}
所以
a = 1;
var a;
喜欢的功能;在定义之前使用变量也可以;
1.)基本上有两种作用域,即局部作用域和全局作用域。功能
范围在本地范围内。
2.)提升将声明移动到当前范围的顶部。
3.)如果你给一个之前没有声明过的变量赋值,它会被自动声明为一个全局变量(即使它在一个函数中)并用赋值初始化。
4.)在局部函数作用域内,用var、let或const关键字声明都会创建一个局部变量。它仅在该功能内可用或可访问。
你的情况:
var variable = 10;//global variable declaration, outside the function.
(()=>{
variable_3 = 35;//declares a global variable, ref. (3).
console.log(variable_3);//prints 35, because it is available globally now.
var variable_3 = 45;//re-declaration turns it to local variable, ref. (4).
variable_2 = 15;//declares global variable, ref. (3)
console.log(variable);//prints 10, because it is a global variable.
})();
console.log(variable_2);//prints because it is a global variable
console.log(variable_3);//fail to print because of re-declaration which changed it from a global variable to local function variable.
var variable=30;
我有一段代码,我想确切地知道 运行 顺序以及为什么结果是这样的:
var variable = 10;
(()=>{
variable_3 = 35;
console.log(variable_3);
var variable_3 = 45;
variable_2 = 15;
console.log(variable);
})();
console.log(variable_2);
console.log(variable_3);
var variable=30;
这段代码的输出是
35, 10, 15, Error
我的理解是:
- 在 IIFE 中,我们创建了一个全局 variable_3 并分配了 35.
- 然后打印出35。
- 我们在IIFE中创建了一个Varvariable_3并分配了45。(这个Var是从IIFE中吊出来的吗??)
35.10.15 我明白了,你能解释一下最后一个数字,让我的逻辑正确吗?
谢谢!
(()=> {
a = 123;
console.log(a); // 123
console.log(window.a); // undefined
var a;
})();
(()=>{
var a = 4;
(()=>{
console.log(a); // undefined
var a = 5;
})()
})()
(()=>{
var source = {};
(()=>{
a = source;
var a;
console.log(a === source) // true
// The variable source is indeed assigned to variable a, although variable a is declared after
})()
})()
var变量是一个定义 喜欢功能, 函数可以在定义前使用;
main();
function main(){}
所以
a = 1;
var a;
喜欢的功能;在定义之前使用变量也可以;
1.)基本上有两种作用域,即局部作用域和全局作用域。功能 范围在本地范围内。
2.)提升将声明移动到当前范围的顶部。
3.)如果你给一个之前没有声明过的变量赋值,它会被自动声明为一个全局变量(即使它在一个函数中)并用赋值初始化。
4.)在局部函数作用域内,用var、let或const关键字声明都会创建一个局部变量。它仅在该功能内可用或可访问。
你的情况:
var variable = 10;//global variable declaration, outside the function.
(()=>{
variable_3 = 35;//declares a global variable, ref. (3).
console.log(variable_3);//prints 35, because it is available globally now.
var variable_3 = 45;//re-declaration turns it to local variable, ref. (4).
variable_2 = 15;//declares global variable, ref. (3)
console.log(variable);//prints 10, because it is a global variable.
})();
console.log(variable_2);//prints because it is a global variable
console.log(variable_3);//fail to print because of re-declaration which changed it from a global variable to local function variable.
var variable=30;