博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript var声明变量背后的原理示例解析
阅读量:7312 次
发布时间:2019-06-30

本文共 1071 字,大约阅读时间需要 3 分钟。

hot3.png

只要是写过点JS代码,很简单一个var 就完事了,那么JS编译器背后它又发生了什么呢?在本文将为大家详细介绍下,感兴趣的朋友不要错过

只要是写过点 ,很简单一个var 就完事了。那对于JS编译器背后它又发生了什么呢?那就一步步通过代码来讲起。 
x = 1; 
alert(x); 
var y = function() { 
alert(x); 
var x = 2; 
alert(x); 
y(); 
上面的代码也会你答对了它会分别输出:1,undefined,2。对于我来说,第一反应它会输出:1,1,2。为什么第二个会输出undefined?在上面我明确定义了一个全局变量x,为何找不到? 
那是因为:js编译器在执行这个y函数的时候,会把把它body里面的声明变量提前到最前面进行声明。比如:var x=2; 编译器先会在body最前面进行var x 声明。
以是的代码等同于下面的这段代码: 
x = 1;  
alert(x); 
var y = function() {<BR>var x;//此时x还未赋值,所以为undefined。 
alert(x); 
x = 2; 
alert(x); 
y(); 
所以也就不难理解x=undefined的了.但是如果把var x = 2;这段代码给删掉,在内部它没有进行var声明。它会一直沿着作用域向上找,此时的x 就为全局x. 
一个更有趣的例子。 
var a = 1;  
function b() { 
a = 10; 
return; 
b(); 
alert(a); 
/// 
var a = 1; 
function b() { 
a = 10; 
return; 
function a() {} 
} b(); alert(a); 
第一个例子为输出10,第二个会输出1。这是为什么呢?况且第二个例子我都return 了。按理都应当输出10才对呀!那时因为JS编译器在背后作怪。 
 
两段代码差别就是第二个例子多了个function a(){};便这个函数体里面什么也没有,并且也没有对它进行任何调用。 
其实JS编译器在背后会把function a() {}编译成 var a=function (){}。此时对于函数内部也有一个a=10; 外面的a些也还是1;根据JS作用域。会先找内部的a,如果找不到再向上一级一级找。 
最张alert(a) 就会显示1;
以上就是本节 的主要内容,分享给朋友们,希望对大家有所帮助。

转载于:https://my.oschina.net/softsky/blog/168438

你可能感兴趣的文章
淘宝搜索算法现状
查看>>
AD活动目录的应用程序目录分区详解
查看>>
【病历书写专题】病历书写系统、课件及规范资源汇总
查看>>
发送intent到homescreen
查看>>
jboss单机和集群配置需要注意的几个关键点,亲测总结!
查看>>
sql over的作用及用法
查看>>
2013让数据说话,2013有各种表单
查看>>
Powershell检查AD对象是否存在
查看>>
MySQL常用操作
查看>>
加密、解密、openssl的基本应用以及自己创建CA
查看>>
使用对称加密来加密Spring Cloud Config配置文件
查看>>
JConsole监控jvm
查看>>
PAP和CHAP认证
查看>>
学习总结
查看>>
偷的我都成强迫症患者了,真无奈@炮哥被偷记
查看>>
中国版Ubuntu麒麟操作系统宣告推出 - Ubuntu专区 LUPA开源社区
查看>>
我的友情链接
查看>>
C++宏
查看>>
「快速阅读」这个智商税,你交了么?
查看>>
网约车智能派单方法
查看>>