?什么是做用域链,如何肯定变量的的做用域javascript
?咱们在写代码的过程当中,如何合理的定义变量的做用域html
?全局做用域 & 某文件内的做用域java
【1】javascript DOM 高级程序设计ide
做用域链是用来描述一种路径的术语,沿着该路径能够肯定变量的值,或者当函数被调用时要使用的方法。函数
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】用图片形象解释了函数执行过程当中,标示符搜索的过程。
“在函数执行过程当中,每遇到一个变量,都会经历一次标识符解析过程以决定从哪里获取和存储数据。该过程从做用域链头部,也就是从活动对象开始搜索,查找同名的标识符,若是找到了就使用这个标识符对应的变量,若是没找到继续搜索做用域链中的下一个对象,若是搜索完全部对象都未找到,则认为该标识符未定义。函数执行过程当中,每一个标识符都要经历这样的搜索过程。”
考虑到标示符的搜索过程,咱们在写代码的时候,“尽可能少使用全局变量”,“一个好的经验法则是:若是一个跨做用域的对象被引用了一次以上,则先把它存储到局部变量里再使用。”