• JavaScript变量作用域


    • JavaScript的变量作用域是基于其特有的作用域链
    • JavaScript没有块级作用域
    • 函数中声明的变量在整个函数中都有定义

    1.JavaScript的作用域链

    var rain = 1;
    function rainman(){
      var man = 2;
      funciton inner(){
        var innerVar = 4;
        alert(rain);
      }
      inner();
    }
    rainman();

    在alert(rain);这句代码,JavaScript首先在inner函数中检查,否则则在rainman中查找,这段代码在rainmain()中没有定义,则最终查找的是全局变量中的rain。

    作用域链:JavaScript需要查找一个变量时,首先查找作用域链第一个对象,如果第一个对象没有定义,则顺序向后查找。

    2.函数体内部,局部变量的优先级比同名的全局变量高

    var rain = 1;
    function check(){
      var rain = 100;
      alert(rain);
    }
    check();    //100 
    alert(rain);  //1

    3.JavaScript没有快级作用域

    function rainmain(){
      //rainman 函数体内存在三个局部变量 i j k 
      var i = 0;
      if(1){
        var j = 0;
        for(var k=0;k<3;k++)
          alert(k);  //0,1,2
        alert(k);  // 3
      }
      alert(j);  //0
    }

    i,j,k的作用域是相同的,他们在rainmain中是全局的

    4.函数中声明的变量在整个函数中都有定义

    function rain(){
      var x = 1;
      function man(){
        x = 100;
      }
      man();    //调用man
      alert(x);  //这里会弹出100
    }
    rain();   //调用rain

    上面代码说明,变量x在整个rain体内都可以使用,并可以重新幅值。但是会有以下情况产生:

    var x = 1;
    function rain(){
      alert(x);   //undefined
      var x = '3';
      alert(x);   //3
    }

    是由于rain定义了x,它会隐藏同名全局变量x。由于alert时还未定义,所以undefined

    5.未使用var关键字定义的变量都是全局变量

    function rain(){
      x = 100;
    }
    rain();
    alert(x);  //100

    6.全局变量都是window对象的属性

    var x = 100;
    alert(window.x); //100
  • 相关阅读:
    source insight快捷键及使用技巧
    HTTP 状态码
    select poll epoll三者之间的比较
    服务器程序后台化以及守护进程的编写规范
    Linux 信号表
    Linux下有线无线网络配置------命令模式
    浅谈 qmake 之 pro、pri、prf、prl文件
    Python VUE 基础知识
    VUE 实现tab切换页面效果
    爬虫框架:scrapy
  • 原文地址:https://www.cnblogs.com/kester/p/6482573.html
Copyright © 2020-2023  润新知