Javascript疑问五:做用域链

?什么是做用域链,如何肯定变量的的做用域javascript

?咱们在写代码的过程当中,如何合理的定义变量的做用域html

?全局做用域 & 某文件内的做用域java

【1】javascript DOM 高级程序设计ide

做用域链是用来描述一种路径的术语,沿着该路径能够肯定变量的值,或者当函数被调用时要使用的方法。函数

  • 从本质上说,var关键字决定了哪一个函数是特定变量的做用域链的终点。
    • 没懂,做用域链的终点是函数?
  • 将变量包含在定义函数时的圆括号内,与使用var关键字效果相同,即该变量也会包含着函数的做用域:
    • funciton myFunction(myVariable) {...}

 

      function myFunction(){
        var myVariable = 'inside'; //local variable
      }
      console.log(myVariable); //'undefied'

      var myVariable = 'outside'; //global variable
      myFunction();
      console.log(myVariable); //'outside'

      function myFunction2(){
        myVariable = 'inside';  //global varabile
        console.log('funciton2: ' + myVariable);
      }
      var myVariable = 'outside'; //global varabile
      myFunction2();
      console.log(myVariable); //'inside'

 

【2】http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.htmlspa

全局做用域设计

(1)最外层函数和在最外层函数外面定义的变量拥有全局做用域code

(2)全部末定义直接赋值的变量自动声明为拥有全局做用域(就是【1】中说的没有使用var关键字定义的变量)htm

(3)全部window对象的属性拥有全局做用域,window.name、window.location、window.top等对象

局部做用域: 函数内部使用var关键字定义的变量,和函数内部定义的函数

这篇文章【2】用图片形象解释了函数执行过程当中,标示符搜索的过程。

“在函数执行过程当中,每遇到一个变量,都会经历一次标识符解析过程以决定从哪里获取和存储数据。该过程从做用域链头部,也就是从活动对象开始搜索,查找同名的标识符,若是找到了就使用这个标识符对应的变量,若是没找到继续搜索做用域链中的下一个对象,若是搜索完全部对象都未找到,则认为该标识符未定义。函数执行过程当中,每一个标识符都要经历这样的搜索过程。”

考虑到标示符的搜索过程,咱们在写代码的时候,“尽可能少使用全局变量”,“一个好的经验法则是:若是一个跨做用域的对象被引用了一次以上,则先把它存储到局部变量里再使用。

相关文章
相关标签/搜索