zoukankan      html  css  js  c++  java
  • javascript作用域解析

    javascript作用域问题是js中比较难以判断的问题,关于作用域问题,你需要掌握以下几个要点

    1,js是基于对象设计的语言,一切皆对象,函数也是对象,而一切对象都是处在window这个对象下派生出来的

    var a=20;

    function setAge(){
    var a=12;

    alert(a);

    }

    setAge();

    alert(a);

    实际上上述代码是在window这个对象上添加了全局属性a=20,以及方法setAge().  而function也是一个对象,下面有自己的属性var a=12以及显示自己属性的alert方法

    2,局部变量是在声明在函数之中的,局部变量作用域函数体之中,函数体外无法访问函数体内部变量.

    function setAge(){
    var a=12;

    }

    alert(a);//undefined 外部无法访问函数体内部的a

    3,没有使用var申明的变量,会被当作全局变量处理

    function setAge(){
    a=20;

    }

    setAge();//执行时a=20被推入全局window中执行,相当于说明了全局变量a=20

    alert(a);//20

    4js中没有区块作用域,在一些其他语言如java中如果有以下代码

    if(true){

    int age=12

    }

    int age只会作用于这个{ }区块中,而js中有类似代码,age不单作用于if之中,在function内都可见

    function setAge(){

    if(true){

    var age=20;

    }

    }

    }

    5函数内部能够访问外部的变量(局部可访问全局,外部不能访问内部)当运行局部函数需要变量时,首先会查找函数内部有没有该变量,没有则会向外部查找,直到window对象也没有,抛出undfined!

    var a=20;
    function box(){
     var b=30;
      function set(){
    	var a=40;
    	console.log(a);
    	console.log(b);
    	}
    return set();
    }
    box();//40,30
    console.log(a);//20
    

     运行box()时,打印出a,由于a在函数体set()内有定义,则取出a=40;而b没有定义,b在其上一层box()内有定义,所以取得b=30

    再运行console.log(a)时,由于该语句放在了box()外面执行,box()执行完毕后,它之内的变量都会被销毁.所以box()内b 以及set()内的a都销毁了,所以代码最后的

    console.log(a)取得的是最外面的全局a=20;

  • 相关阅读:
    下载文件总结
    用PHP,怎么获取PHP.ini中的文件上传最大的字节数。也就是默认的2M
    TP框架下载功能 - 不想下天桥 - 博客园
    CSS,font-family,好看常用的中文字体
    安装Wamp后 Apache无法启动的解决方法
    :nth-child(n)
    list-style
    netbeans常用快捷键
    ideaic快捷键
    配置nutch
  • 原文地址:https://www.cnblogs.com/luojunweb/p/7055448.html
Copyright © 2011-2022 走看看