数码资讯
Javascriptvar声明变量背后的原理示例分析
只要你写一点js代码,它就是一个非常简单的变种。js编译器发生了什么它从代码一步一步开始。 复制代码代码如下所示: x=1; 警报(x); 函数(){() 警报(x); 变量x=2; 警报(x); } (y); 上面的代码也会给你正确的答案:1,定义,2。对我来说,第一反应就是输出:1,1, 2.w
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
只要你写一点js代码,它就是一个非常简单的变种。js编译器发生了什么它从代码一步一步开始。
复制代码代码如下所示:
x=1;
警报(x);
函数(){()
警报(x);
变量x=2;
警报(x);
}
(y);
上面的代码也会给你正确的答案:1,定义,2。对我来说,第一反应就是输出:1,1, 2.why二将输出定义的我已经在上面定义了一个全局变量X,为什么你找不到呢
这是因为:当js编译器执行这个Y函数时,它会将其正文中的声明变量提前到前面做声明。例如:var = 2;编译器首先在主体前面执行一个var x声明。事实上,上面的代码相当于代码的下面部分:
复制代码代码如下所示:
x=1;
警报(x);
在这个时候,函数不是赋值,所以没有定义。
警报(x);
x=2;
警报(x);
}
(y);
所以不难理解x =未定义。但是如果var x=2,这个代码被删除了,而且它内部不做var声明,它总是沿着范围向上看,此时x是全局x。
然后看看一个更有趣的例子。
复制代码代码如下所示:
var a = 1;
函数B(){
a = 10;
返回;
}
(b);
警报(a);
中
var a=1;
函数B(){
a = 10;
返回;
函数(a){
}();警报(a);
例子很简单,第一个例子是输出10,第二个例子输出1,这是为什么此外,我还有第二个返回示例,它应该输出10!那时,因为JS编译器在后面。
这两个代码是函数(a){的第二个例子之间的区别;然后函数内部也没有,也没有调用它。
事实上,js编译器将函数A(后面)编译为var =函数(){ },此时,函数内部也有一个A = 10;外部A仍然是1;根据js范围,您会发现内部第一个。如果你找不到它,你会在第一级找到它。
最公开的警报(a)将显示1;
复制代码代码如下所示:
x=1;
警报(x);
函数(){()
警报(x);
变量x=2;
警报(x);
}
(y);
上面的代码也会给你正确的答案:1,定义,2。对我来说,第一反应就是输出:1,1, 2.why二将输出定义的我已经在上面定义了一个全局变量X,为什么你找不到呢
这是因为:当js编译器执行这个Y函数时,它会将其正文中的声明变量提前到前面做声明。例如:var = 2;编译器首先在主体前面执行一个var x声明。事实上,上面的代码相当于代码的下面部分:
复制代码代码如下所示:
x=1;
警报(x);
在这个时候,函数不是赋值,所以没有定义。
警报(x);
x=2;
警报(x);
}
(y);
所以不难理解x =未定义。但是如果var x=2,这个代码被删除了,而且它内部不做var声明,它总是沿着范围向上看,此时x是全局x。
然后看看一个更有趣的例子。
复制代码代码如下所示:
var a = 1;
函数B(){
a = 10;
返回;
}
(b);
警报(a);
中
var a=1;
函数B(){
a = 10;
返回;
函数(a){
}();警报(a);
例子很简单,第一个例子是输出10,第二个例子输出1,这是为什么此外,我还有第二个返回示例,它应该输出10!那时,因为JS编译器在后面。
这两个代码是函数(a){的第二个例子之间的区别;然后函数内部也没有,也没有调用它。
事实上,js编译器将函数A(后面)编译为var =函数(){ },此时,函数内部也有一个A = 10;外部A仍然是1;根据js范围,您会发现内部第一个。如果你找不到它,你会在第一级找到它。
最公开的警报(a)将显示1;
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。