JavaScript中的预解析顺序(优先级)
2017-03-12 22:51
155 查看
参考链接1: JavaScript函数声明前置与变量声明
参考链接2: javascript的执行顺序
执行代码
参数,参数名就是VO中的名称。值就是实参的值。如果没有传递,则为undefined
函数声明,如果VO中中已经存在相同的属性,则替换它的值
变量声明:通过var声明的。在VO中的值为undefined,如果VO中已经含有相同的属性,则不会影响已经存在的属性。
打印结果:
解释:
1, 因为函数预解析,所以fn()可以在前边执行
2,fn函数执行的时候,内部预解析,n变量提升,但是不赋值,此时为undefined。
打印结果:
解释:
1, 因为函数预解析,所以fn()可以在前边执行
2,fn函数执行的时候,内部预解析,先对实参预解析,且赋值为实参的值1,var声明的n变量提升,由于已经存在n,所以不会重新定义变量。
打印结果:
解释:
1, 因为函数预解析,所以fn()可以在前边执行
2,fn函数执行的时候,先给预解析完成的形参赋值,再进行函数内部的预解析
内部预解析解读如下所示:
2,函数执行的时候,函数内部才会进行预解析,如果有参数,先给实参赋值再进行函数内部的预解析。
3,预解析函数是声明+定义(开辟了内存空间,形参值默认是undefined)。
4,预解析变量是只声明,不赋值,默认为undefined。
5,函数重名时,后者会覆盖前者。
6,变量重名时,不会重新声明,但是执行代码的时候会重新赋值。
7,变量和函数重名的时候,函数的优先级高于变量。
以上内容作为个人学习记录使用,仅供参考,不足之处,烦请告知。
参考链接2: javascript的执行顺序
处理执行上下文代码分为两个阶段:
进入执行上下文执行代码
进入执行上下文:
进入执行上下文,方法的变量对象(VO)就会被以下属性填充参数,参数名就是VO中的名称。值就是实参的值。如果没有传递,则为undefined
函数声明,如果VO中中已经存在相同的属性,则替换它的值
变量声明:通过var声明的。在VO中的值为undefined,如果VO中已经含有相同的属性,则不会影响已经存在的属性。
案例1:
var n = 1; fn(n); function fn() { console.log(n); var n = 2; }
打印结果:
undefined
解释:
1, 因为函数预解析,所以fn()可以在前边执行
2,fn函数执行的时候,内部预解析,n变量提升,但是不赋值,此时为undefined。
案例2:
var n = 1; fn(n); function fn(n) { console.log(n); var n = 2; }
打印结果:
1
解释:
1, 因为函数预解析,所以fn()可以在前边执行
2,fn函数执行的时候,内部预解析,先对实参预解析,且赋值为实参的值1,var声明的n变量提升,由于已经存在n,所以不会重新定义变量。
案例3:
var n = 1; fn(n); function fn(n) { console.log(n); function n() { console.log(666); } var n = 2; }
打印结果:
function n() { console.log(666); }
解释:
1, 因为函数预解析,所以fn()可以在前边执行
2,fn函数执行的时候,先给预解析完成的形参赋值,再进行函数内部的预解析
内部预解析解读如下所示:
n = 1;//实参赋值,由undefined变为1 n = function() { console.log(666); }//n被重新赋值 var n = undefined;//由于已经存在n变量,变量不会被重复声明。所以此句会被忽略
个人理解总结:
1,预解析的顺序是从上到下,函数的优先级高于变量,函数声明提前到当前作用域最顶端,在var之上。2,函数执行的时候,函数内部才会进行预解析,如果有参数,先给实参赋值再进行函数内部的预解析。
3,预解析函数是声明+定义(开辟了内存空间,形参值默认是undefined)。
4,预解析变量是只声明,不赋值,默认为undefined。
5,函数重名时,后者会覆盖前者。
6,变量重名时,不会重新声明,但是执行代码的时候会重新赋值。
7,变量和函数重名的时候,函数的优先级高于变量。
以上内容作为个人学习记录使用,仅供参考,不足之处,烦请告知。
相关文章推荐
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- 浏览器对javascript“定义式”函数、“赋值式”函数解析顺序
- javascript的解析执行顺序
- JavaScript:全面解析各种浏览器网页中的JS代码的执行顺序
- JavaScript解析顺序和变量作用域
- JavaScript中逻辑运算符(&&、||、!)的优先级和运算顺序
- javascript的函数类别及声明函数的解析顺序
- 通过实验窥探javascript的解析执行顺序
- javascript的解析执行顺序在各个浏览器中的不同
- 走入javascript(八)作用域和解析顺序
- JavaScript解析顺序和变量作用域
- JavaScript在Html中的解析顺序
- JavaScript:全面解析各种浏览器网页中的JS代码的执行顺序
- javascript学习之解析顺序和变量作用域
- javaScript解析顺序
- javascript的解析执行顺序在各个浏览器中的不同
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- javascript的解析顺序和变量作用域
- JavaScript 全面解析各种浏览器网页中的JS 执行顺序
- 页面解析javascript的顺序