简单理解JS作用域问题
2013-05-28 17:03
351 查看
DEMO1:
DEMO2:
解 释:
demo1:
全局作用域定义了一个var sa = 12,函数内部也定义一个了var sa = 23。而函数在调用之前,会存在预编译的过程(给函数内部sa变量分配内存空间),就是把定义的内部sa变量赋值为undefined;然后执行的时候,遇到有数值再赋值给这个变量,另一方面。函数里面优先查找自己的作用域内的变量,如果为找到再向外一层一层的查找,这个函数执行的时候已经存在预编译,又优先查找自己的作用域,所以第一个为undefiend,然后碰到了 var sa = 23;才给sa赋值为23,所以下面这个是23。至于函数外面的哪个alert(sa),他只能获取全局作用域的var sa=12,而不能获取函数里面的sa。
demo2:
全局作用域定义了一个var sa = 12;,函数内没有定义var sa。函数执行的时候查找自己作用域有没有var sa(但是没有),所以向外查找,结果查找了var sa=12;所以第一个是12,然后又一次给外层的var sa=12赋值为23,所以第二个是23,函数外部的alert(sa),在运行函数的时候函数已经吧函数外的var sa=12替换成了23,所以外层也是23。
var sa = 12; function show(){ alert(sa); var sa = 23; alert(sa); } show(); alert(sa);
DEMO2:
var sa = 12; function show(){ alert(sa); sa = 23; alert(sa); } show(); alert(sa);
解 释:
demo1:
全局作用域定义了一个var sa = 12,函数内部也定义一个了var sa = 23。而函数在调用之前,会存在预编译的过程(给函数内部sa变量分配内存空间),就是把定义的内部sa变量赋值为undefined;然后执行的时候,遇到有数值再赋值给这个变量,另一方面。函数里面优先查找自己的作用域内的变量,如果为找到再向外一层一层的查找,这个函数执行的时候已经存在预编译,又优先查找自己的作用域,所以第一个为undefiend,然后碰到了 var sa = 23;才给sa赋值为23,所以下面这个是23。至于函数外面的哪个alert(sa),他只能获取全局作用域的var sa=12,而不能获取函数里面的sa。
demo2:
全局作用域定义了一个var sa = 12;,函数内没有定义var sa。函数执行的时候查找自己作用域有没有var sa(但是没有),所以向外查找,结果查找了var sa=12;所以第一个是12,然后又一次给外层的var sa=12赋值为23,所以第二个是23,函数外部的alert(sa),在运行函数的时候函数已经吧函数外的var sa=12替换成了23,所以外层也是23。
相关文章推荐
- js作用域问题一步步透彻理解
- js的作用域问题及简单练习
- js作用域问题一步步透彻理解
- js作用域问题一步步透彻理解
- js作用域问题一步步透彻理解
- js作用域问题一步步透彻理解
- js 预解析 简单常见情况与个人理解
- 对于CocoaPods的简单理解,实践安装使用过程和常见问题
- js作用域及作用域链概念理解及使用
- js的作用域问题
- 简单理解Java的垃圾回收机制与finalize方法的作用
- nodejs assert断言的简单理解
- JS高级程序设计第三版——变量、作用域和内存问题
- java:关于short s1=1;s1=s1+1;short s1=1;s1+=1;short s3=s1+s2;中存在的简单数据类型转换问题的理解
- js与ajax中异步调用的简单理解
- 一些简单js基础问题记录(长期更新)
- 汉诺塔问题的简单理解和总结
- 简单理解js的prototype属性
- js高程第四章 变量、作用域和内存问题------学习笔记
- 对于CocoaPods的简单理解,实践安装使用过程和常见问题