Javascript作用域的问题
来源:互联网 发布:linux ln 文件夹 编辑:程序博客网 时间:2024/05/10 09:53
Javascript作用域的问题
发布:dxy 字体:[增加 减小] 类型:转载
在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hoisting”的问题。即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的。
可以看看这个例子:
var a = 'global';
(function () {
alert(a);
var a = 'local';
})();
大家第一眼看到这个例子觉得输出结果是什么?‘global'?还是‘local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的。
其实很简单,看一看JavaScript运行机制就会明白。我们可以把这种现象看做“预声明”。但是如果稍微深究一下,会明白得更透彻。
这里其实涉及到对象属性绑定机制。因为所有JavaScript函数都是一个对象。在函数里声明的变量可以看做这个对象的“类似属性”。对象属性的绑定在语言里是有分“早绑定”和“晚绑定”之分的。
【早绑定】
是指在实例化对象之前定义其属性和方法。解析程序时可以提前转换为机器代码。通常的强类型语言如C++,java等,都是早绑定机制的。而JavaScript不是强类型语言。它使用的是“晚绑定”机制。
【晚绑定】
是指在程序运行前,无需检查对象类型,只要检查对象是否支持特性和方法即可。可以在绑定前对对象执行大量操作而不受任何惩罚。
上面代码出现的“预声明”现象,我们大可用“晚绑定”机制来解释。在函数的作用域中,所有变量都是“晚绑定”的。 即声明是顶级的。所以上面的代码和下面的一致:
var a = 'global';
(function () {
var a;
alert(a);
a = 'local';
})();
在alert(a)之前只对a作了声明而没有赋值。所以结果可想而知。
复制代码代码如下:
var a = 'global';
(function () {
alert(a);
var a = 'local';
})();
大家第一眼看到这个例子觉得输出结果是什么?‘global'?还是‘local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的。
其实很简单,看一看JavaScript运行机制就会明白。我们可以把这种现象看做“预声明”。但是如果稍微深究一下,会明白得更透彻。
这里其实涉及到对象属性绑定机制。因为所有JavaScript函数都是一个对象。在函数里声明的变量可以看做这个对象的“类似属性”。对象属性的绑定在语言里是有分“早绑定”和“晚绑定”之分的。
【早绑定】
是指在实例化对象之前定义其属性和方法。解析程序时可以提前转换为机器代码。通常的强类型语言如C++,java等,都是早绑定机制的。而JavaScript不是强类型语言。它使用的是“晚绑定”机制。
【晚绑定】
是指在程序运行前,无需检查对象类型,只要检查对象是否支持特性和方法即可。可以在绑定前对对象执行大量操作而不受任何惩罚。
上面代码出现的“预声明”现象,我们大可用“晚绑定”机制来解释。在函数的作用域中,所有变量都是“晚绑定”的。 即声明是顶级的。所以上面的代码和下面的一致:
复制代码代码如下:
var a = 'global';
(function () {
var a;
alert(a);
a = 'local';
})();
在alert(a)之前只对a作了声明而没有赋值。所以结果可想而知。
你说这坑爹不坑爹????什么人设计的啊?真是的。。。不知道为什么这么设计?
- Javascript作用域的问题
- JavaScript 的作用域问题
- Javascript作用域的问题
- JavaScript的作用域问题
- javaScript作用域问题
- JavaScript的变量作用域问题
- javascript中的ajax的作用域问题
- JavaScript变量作用域的一个问题
- 有关javascript的作用域问题
- JavaScript作用域问题详述
- JavaScript中的作用域问题
- javascript的作用域
- javascript的作用域
- javascript的作用域
- javascript的作用域
- javaScript的作用域
- JavaScript的作用域
- javascript的作用域
- DIV+CSS 学习心得:分组,嵌套,伪类,伪元素
- iPhone 官方 Sample 阅读笔记
- Java 如何配置环境变量 win7配置1.6Jdk的环境变量【新手教程】
- 山寨手机
- 定义压堆栈方法函数
- Javascript作用域的问题
- 彩色图像的灰度化处理
- ACM java求平均年龄
- IT人的出路在哪?(大牛的话)
- 用N个三角形最多可以把平面分成几个区域
- 保存CBitmap为bmp图片
- IPTV
- HDU 3714 几何+三分法求凹曲线顶点
- ajax异步文件上传原理解析