一个挺有意思的Javascript小问题说明_javascript技巧
程序员文章站
2022-05-12 09:53:33
...
先来看以下3段代码
var firstName = "Mark";
(function DisplayFirstName() {
console.log(firstName);
})();//必然输出 Mark
var lastName = "Aut";
(function DisplayLastName() {
var lastName = "Bru";
console.log(lastName);
})();//必然输出 Bru, 本地作用域的优先级高于全局作用域
//那么下面这段代码呢?
var lastName = "Aut";
(function DisplayLastName() {
console.log(lastName);
var lastName = "Bru";
console.log(lastName);
})();//谁能猜出结果是什么?
这个输出的结果是:
LOG: undefined
LOG: Bru
这出乎了我的意料, 我原来以为应该是 "Aut" 和 "Bru"的
我原来的理解是: 在程序第一个输出lastName的时候, 程序没有找到本地声明的lastName变量,所以使用了全局的lastName定义, 第二次的时候才使用本地变量的值
(因为在我的概念里,javascript是解释型语言,一句一句的......执行)
看到这个结果,看来javascript的执行并不都是顺序的..
目前为止,就我的猜测,javascript执行应该是先做语法分析,然后顺便分析完成了变量表(本地和全局)
然后才开始顺序执行一行行脚本
还请各位javascript高手解惑
复制代码 代码如下:
var firstName = "Mark";
(function DisplayFirstName() {
console.log(firstName);
})();//必然输出 Mark
var lastName = "Aut";
(function DisplayLastName() {
var lastName = "Bru";
console.log(lastName);
})();//必然输出 Bru, 本地作用域的优先级高于全局作用域
//那么下面这段代码呢?
var lastName = "Aut";
(function DisplayLastName() {
console.log(lastName);
var lastName = "Bru";
console.log(lastName);
})();//谁能猜出结果是什么?
这个输出的结果是:
LOG: undefined
LOG: Bru
这出乎了我的意料, 我原来以为应该是 "Aut" 和 "Bru"的
我原来的理解是: 在程序第一个输出lastName的时候, 程序没有找到本地声明的lastName变量,所以使用了全局的lastName定义, 第二次的时候才使用本地变量的值
(因为在我的概念里,javascript是解释型语言,一句一句的......执行)
看到这个结果,看来javascript的执行并不都是顺序的..
目前为止,就我的猜测,javascript执行应该是先做语法分析,然后顺便分析完成了变量表(本地和全局)
然后才开始顺序执行一行行脚本
还请各位javascript高手解惑
推荐阅读
-
使用VSCode调试javascript/typescript的一个技巧
-
JavaScript调试之console.log调试的一个小技巧分享
-
js对数字的格式化使用说明_javascript技巧
-
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果_javascript技巧
-
一个可以随意添加多个序列的tag函数_javascript技巧
-
ie 处理 gif动画 的onload 事件的一个 bug_javascript技巧
-
用js写了一个类似php的print_r输出换行功能_javascript技巧
-
一个js导致的jquery失效问题的解决方法_javascript技巧
-
一个特殊的排序需求的javascript实现代码_javascript技巧
-
js或css文件后面跟参数的原因说明_javascript技巧