手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >JavaScript var声明变量背后的原理示例解析
JavaScript var声明变量背后的原理示例解析
摘要:只要是写过点JS代码,很简单一个var就完事了。那对于JS编译器背后它又发生了什么呢?那就一步步通过代码来讲起。复制代码代码如下:x=1;a...

只要是写过点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;

【JavaScript var声明变量背后的原理示例解析】相关文章:

用JavaScript实现页面重定向功能的教程

JavaScript实现的MD5算法完整实例

JavaScript实现带标题的图片轮播特效

JavaScript里实用的原生API汇总

JavaScript Array对象详解

用JavaScript实现对话框的教程

JavaScript数组去重的3种方法和代码实例

JavaScript实现简单的数字倒计时

javascript瀑布流式图片懒加载实例解析与优化

Javascript监视变量变化的方法

精品推荐
分类导航