Javascript的"预编译"思考
2015-03-27 13:58
267 查看
看到一个JS面试题,大约是这样的
Js代码
<script>
var x = 1, y = z = 0;
function add(n) {
n = n+1;
}
y = add(x);
function add(n) {
n = n + 3;
}
z = add(x);
</script>
问执行完毕后 x, y, z 的值分别是多少?
仔细看的人马上就知道了, x, y 和 z 分别是 1, undefined 和 undefined。
不过,如果将两个 add 函数修改一下,题目变为
Js代码
<script>
var x = 1, y = z = 0;
function add(n) {
return n = n+1;
}
y = add(x);
function add(n) {
return n = n + 3;
}
z = add(x);
</script>
那么这时 y 和 z 分别是什么呢?我马上想到是 2 和 4,不过结果却是 4 和 4。
这说明,在第一次调用 add 函数之前,第二个 add 函数已经覆盖了第一个 add 函数。原来,这是 JS 解释器的"预编译",JS 解析器在执行语句前会将函数声明和变量定义进行"预编译",而这个"预编译",并非一个页面一个页面地"预编译",而是一段一段地预编译,所谓的段就是一个 <script>
块。且看下面的代码
Js代码
<script>
function add(n) {
return n = n+1;
}
alert(add(1));
</script>
<script>
function add(n) {
return n = n+3;
}
alert(add(1));
</script>
会分别弹出 2 和 4。
Js代码
<script>
var x = 1, y = z = 0;
function add(n) {
n = n+1;
}
y = add(x);
function add(n) {
n = n + 3;
}
z = add(x);
</script>
问执行完毕后 x, y, z 的值分别是多少?
仔细看的人马上就知道了, x, y 和 z 分别是 1, undefined 和 undefined。
不过,如果将两个 add 函数修改一下,题目变为
Js代码
<script>
var x = 1, y = z = 0;
function add(n) {
return n = n+1;
}
y = add(x);
function add(n) {
return n = n + 3;
}
z = add(x);
</script>
那么这时 y 和 z 分别是什么呢?我马上想到是 2 和 4,不过结果却是 4 和 4。
这说明,在第一次调用 add 函数之前,第二个 add 函数已经覆盖了第一个 add 函数。原来,这是 JS 解释器的"预编译",JS 解析器在执行语句前会将函数声明和变量定义进行"预编译",而这个"预编译",并非一个页面一个页面地"预编译",而是一段一段地预编译,所谓的段就是一个 <script>
块。且看下面的代码
Js代码
<script>
function add(n) {
return n = n+1;
}
alert(add(1));
</script>
<script>
function add(n) {
return n = n+3;
}
alert(add(1));
</script>
会分别弹出 2 和 4。
相关文章推荐
- 获取日期时间星期的"JAVASCRIPT代码"
- "百万首页"深度思考
- Flex 调用javascript上传文件读取文件的本地路径的一直是 "C:/fakepath/" 的解决方案
- Javascript的"预编译"思考
- "JavaScript语言精髓与编程实践"之调用函数的几种方法
- <script language="JavaScript">
- 由一本缺页的"书"引发出一系列思考
- <a href="#">与<a href="javascript:void(0)">
- "棱镜门事件"的思考:黑客是什么,如何成为黑客?[更新:2015-05-09]
- <a> href=javascript://与href="#"的区别
- 一段跨浏览器的"复制到剪贴板"javascript代码
- "JavaScript时钟"(指针式样的)
- &lt;a href=&quot;javascript:history.back();&quot;&gt;返回上一页&lt;/a&gt;
- javascript 中的"this"
- 使用用JavaScript或Jquery获取标准下拉框的"选中值"和"选中文本"
- 注意! JavaScript中的"陷阱"
- 如果用JavaScript获取标准下拉框的"选中值"和"选中文本"
- 各位朋友对" JavaScript挑战赛--随机颜色"的挑战代码
- <img src="javascript:alert(/xss/)">已经慢慢过时了的
- <script language= "javascript " for= "window " event= "onload " /> 的问题解读