函数声明、变量声明以及变量赋值之间有以下几点共识:
1、所有的全局变量都是window的属性
2、函数声明被提升到范围作用域的顶端
3、变量声明被提升到范围作用域的顶端
4、变量声明比函数声明的优先级高,变量声明优先于函数声明被提升,如果两者同名同时存在,后被提升的函数声明会覆盖先被提升的变量声明
5、变量赋值不会被提升,到执行行代码才开始赋值
补充:
6、调用javascript函数的整个过程可以分为预编译期(也叫声明期)和赋值期(也叫计算执行期)。
预编译期完成对所有变量(包括形参、函数内部参数)和函数的声明,
赋值期又可以分为两个阶段,函数花括号内语句执行前后,执行前完成对形参置和函数的赋值,执行后按照语句顺序执行赋值。
例如:
function test(msg){
var msg ;
alert(msg);//弹出:test方法测试,因为先完成所有变量的声明,然后在对形参赋值
}
test("test方法测试");
对以上内容的总结和测试代码可以查看:
http://ju.outofmemory.cn/entry/4646
原文:http://dmitry.baranovskiy.com/post/91403200
时间: 2024-10-13 00:08:43