前端开发 js的执行顺序

h5微信公众号前端开发教程|零基础学前端开发知乎|怎么选择前端开发环境
javascript给人的直观感受是,从上往下执行,但实际上却不是这样的,先看个例子。
console.log(test); //undefined
var test = “你好”;
console.log(test); //”你好”
console.log(test2); //Uncaught ReferenceError: test2 is not defined
//模拟编译和执行
var test;//最先编译出来
test = “你好”;//执行的时候,赋值给test
按理说这样写,应该会报错因为函数还没定义就执行了,但实际运行的时候却没有报错。为什么呢?因为javascript执行时,在同一个作用域内是先编译再执行。编译的时候会编译function和var这两个关键词定义的变量,编译完成后从上往下执行并向变量赋值。所以test执行之前, var test 已经执行过了,所以test不会报错,而test2就会报错。
下一个例子
test();//执行结果是”你好”
function test() {
console.log(“你好”);
}
//模拟编译和执行
var test = function(){}//编译时把方法赋值给test
test();//执行
console.log(test); //把函数打印出来了
function和var是有些不一样的, function编译时会把function赋值给test, 然后再往下执行。
还有另外的坑人的例子
console.log(test) //undefined
test(); //执行结果报错 Uncaught TypeError: test is not a function
var test = function() {
console.log(“你好”);
}
//模拟编译和执行
var test;//先编译找到关键字var
test = function() {//然后赋值
console.log(“你好”);
}
上面这个例子的function是以赋值的形式给test的,编译的时候只编译了var test,所以执行的时候从上往下执行,test()会报错。
变量提升:
var a = 1;
function test() {
a = 2;
return;
function a() {}
}
test();
console.log(a); //结果还是1
为什么结果是1不是2? 因为a = 2是局部变量,那为什么a变成了test里面的局部变量了呢?因为javascript是在同一个作用域内先编译后执行,test里面有一个function a(),遇见关键字function了就要编译,前面讲过function怎么编译执行的,所以a = 2就变成局部变量了,所以最后执行结果a=1。
总结一下: javascript就是在同一个作用域内先编译后执行;
微信小程序群功能开发-前端篇|微信支付前端开发|html前端开发 空格怎么打
» 本文来自:前端开发者 » 《前端开发 js的执行顺序》
» 本文链接地址:https://www.rokub.com/5241.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!