声明前后的JavaScript变量?
有人能回答,javaScript是如何编译或处理这种特殊情况的吗?我知道javaScript在声明前后的JavaScript变量?,javascript,function,hoisting,Javascript,Function,Hoisting,有人能回答,javaScript是如何编译或处理这种特殊情况的吗?我知道javaScript在提升时会优先考虑函数声明。但是同一个标识符b如何在同一块下或同一词汇范围内保存两个不同的值呢 有人可能会说,好吧,我将在声明之前使用b作为函数,在分配编号之后使用编号 您可以理解代码执行有两个阶段 创建阶段 执行阶段 创建阶段:-在创建阶段,函数按原样在顶部提升,而变量被提升,但没有分配给它的值(或者可以说它的值未定义) 执行阶段:-在执行上下文期间,当变量到达赋值发生的行时,它将值赋值给变量 所以在创
提升时会优先考虑函数
声明。但是同一个标识符b
如何在同一块下或同一词汇范围内保存两个不同的值呢
有人可能会说,好吧,我将在声明之前使用b
作为函数
,在分配编号之后使用编号
您可以理解代码执行有两个阶段
创建阶段
执行阶段
创建阶段:-在创建阶段,函数按原样在顶部提升,而变量被提升,但没有分配给它的值(或者可以说它的值未定义)
执行阶段:-在执行上下文期间,当变量到达赋值发生的行时,它将值赋值给变量
所以在创建阶段的代码中
函数b被提升,编译器将像这样读取它
function a(){
console.log(typeof b); // function
function b() {
var c = 52;
console.log(c);
}
var b = 88;
console.log(typeof b); // number
}
所以当你到达终点时
function a(){
function b(){
var c = 52;
console.log(c);
}
console.log(typeof b); // function
b = 88;
console.log(typeof b); // number
}
它为变量b
分配了一个新值,该变量的类型为number
,据我所知,这不是两个不同的引用
内部,,
function b(){/*code Here*/}
作为var b=function(){/*code Here*/}
执行
因此,第一个typeof(b)
返回函数
当var b=88时代码>执行,这基本上将88分配给已经存在的b引用。
因此,第二个typeof(b)
返回数字
运行时映像以供参考:
在这种情况下,吊装过程如下:
声明var b
,不进行初始化
声明函数b
,它覆盖var声明
将值88
分配给变量b
因此,函数实际上被转换为“逻辑等价物”:
函数a(){
var b;//已吊装
b=函数b(){//已提升
var c=52;
控制台日志(c);
}
console.log(typeof b);//函数
b=88;
console.log(typeof b);//编号
}
注:和的可能重复项
b = 88