javascript变量作用域
来源:互联网 发布:打底衫比外套长 知乎 编辑:程序博客网 时间:2024/05/22 05:22
首先了解:
什么是块级作用域呢?
任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的。
函数作用域:定义在函数中的参数和变量在函数外部是不可见的。
1.javascript是没有块级作用域的。函数是JavaScript中唯一拥有自身作用域的结构。
函数作用域
- var scope="global";
- function t(){
- console.log(scope);
- var scope="local"
- console.log(scope);
- }
- t();
(PS: console.log()是firebug提供的调试工具)
第一句输出的是: "undefined",而不是 "global"
第二讲输出的是:"local"
scope声明覆盖了全局的scope,但是还没有赋值,所以输出:”undefined“。
所谓函数作用域就是说:-》变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。
所以根据函数作用域的意思,可以将上述代码重写如下:
- var scope="global";
- function t(){
- var scope;
- console.log(scope);
- scope="local"
- console.log(scope);
- }
- t();
我们可以看到,由于函数作用域的特性,局部变量在整个函数体始终是由定义的,我们可以将变量声明”提前“到函数体顶部,同时变量初始化还在原来位置。
为什么说Js没有块级作用域呢,有以下代码为证:
- var name="global";
- if(true){
- var name="local";
- console.log(name)
- }
- console.log(name);
都输出是“local",如果有块级作用域,明显if语句将创建局部变量name,并不会修改全局name,可是没有这样,所以Js没有块级作用域。
现在很好理解为什么会得出那样的结果了。
2变量作用域
- function t(flag){
- if(flag){
- s="ifscope";
- for(var i=0;i<2;i++)
- ;
- }
- console.log(i);
- }
- t(true);
- console.log(s);
声明s中的var去掉。
程序会报错还是输出“ifscope"呢?
会输出:”ifscope"
这主要是Js中没有用var声明的变量都是全局变量,而且是顶层对象的属性。
3.作用域链
- name="lwy";
- function t(){
- var name="tlwy";
- function s(){
- var name="slwy";
- console.log(name);
- }
- function ss(){
- console.log(name);
- }
- s();
- ss();
- }
- t();
当执行s时,将创建函数s的执行环境(调用对象),并将该对象置于链表开头,然后将函数t的调用对象链接在之后,最后是全局对象。然后从链表开头寻找变量name,很明显
name是"slwy"。
但执行ss()时,作用域链是: ss()->t()->window,所以name是”tlwy"
- JavaScript 变量作用域
- javascript 变量作用域
- javascript变量作用域
- JavaScript变量作用域
- Javascript 变量作用域
- JavaScript变量作用域
- Javascript 变量作用域
- Javascript变量作用域
- JavaScript变量作用域
- javascript变量作用域
- javascript 变量作用域
- javascript变量作用域
- javascript-变量-作用域
- JavaScript变量作用域
- javascript变量作用域
- javaScript变量作用域
- javascript变量作用域
- javascript变量作用域
- neutron-dhcp-agent服务启动流程
- 数据挖掘中的集成方法——通过集成预测来提升精度(读书笔记)
- 经营成功的测试职业生涯
- 软件质量的浅谈
- 如何让听众对你的演示感兴趣
- javascript变量作用域
- 如何做好系统测试
- 需求那点事
- 最佳面试问题集锦
- 适合于小团队产品迭代的APP测试流程
- Web端测试和移动端测试的区别
- 斯坦福CS231n课程: 视觉识别中的卷积神经网络 Convolutional Neural Networks for Visual Recognition
- LR11.0 下载及破解
- 应用程序无法启动,因为应用程序的并行配置不正确