1 [JavaScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | function func1 ( num ) { console.log( num ); var num = 456; console.log( num ); } var num = 123; func1( num ); //分析 //1. 进行预解析,观察声明有两个,一个函数声明func1,一个是变量声明var num // func1被预解析记录,并与函数体相连 // var num 被记录 //2. 预解析结束,开始执行代码 // 执行第一句话为:num = 123,对num进行赋值 // 调用func1( num ); // 在进入函数体前,开辟函数内存需要的内存空间,将函数的参数var num = 123进行声明 // 进入函数体,开始执行预解析,观察到有个var num,重复声明,忽略 // 执行函数体,第一个console.log( num ) => 123 // num = 456,对num进行赋值 // 第二个console.log( num ) => 456 // 函数执行结束,回到外层 |
2 [JavaScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | function func2 () { console.log( num ); var num = 456; console.log( num ); } var num = 123; func2( num ); //分析 //1. 进行预解析, 观察到有两个声明, func2和var num // func2被记录,并与函数体相连 // var num被记录 //2. 预解析结束,开始执行代码 // 执行num = 123,对num进行赋值 // 调用func( num ) // 进入函数体,进行预解析, 记录var num // 执行第一个console.log( num ) => undefined // 执行赋值语句, num = 456 // 执行第二个console.log( num ) => 456 |
3 [JavaScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | function func3 () { console.log( num ); num = 456; console.log( num ); } var num = 123; func3( num ); console.log( num ); //分析 //1. 进行预解析, 观察到有两个声明,func3和var num // func3被记录,并与函数体相连 // var num被记录 //2. 预解析借宿,开始执行代码 // num = 123,进行赋值 // 调用func3( num ) // 进入函数体,进行预解析,无需要记录对象,预解析结束 // 执行第一个console.log( num ) => 此时函数的局部作用域内无num,向全局中找,全局num = 123 => 123 // num = 456,进行赋值操作 => 更改全局中的num = 456 // 执行第二个console.log( num ) => 456 // 函数执行完毕,执行第三个console.log( num ) => 456 |
|
|