遇到很多作用域上的问题,容易犯错,犯错并不可怕,可怕的是明知犯错,还不去弥补。
作用域定义了变量或者函数可有权访问的范围。
外部环境不能访问内部环境的任何变量与函数。
作用域链
在 JavaScript 中,每个函数都有着自己的作用域,在每次调用一个函数的时候 ,就会进入一个函数内的作用域,而当函数执行返回以后,就返回调用前的作用域。
当代码在一个作用域内执行时,就会根据其上下文创建一个作用域链,该作用域链的用途就是控制当前作用域对于内所有的变量与函数的有序访问。作用域链的最前端,始终都是当前执行代码所在的作用域的变量对象。
权威指南的讲明
JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
var name = 'jim'; function showName(){ console.log(name); } function show(){ var name = 'tom'; showName(); } show(); // 输出结果为jim
对上式变式
var name = 'jim'; function show(){ var name = 'tom'; function showName(){ console.log(name); } showName(); } show(); // 输出结果为tom