作用域链的问题?


 var name = 'laruence';
 function echo() {
      alert(name);
 }

 function env() {
      var name = 'eve';
      echo();
 }

 env(); 
 
 答案是多少

当然是laruence,在函数定义的时候就定了,如果全局作用域下没有name,无论怎么调用都会报错。


laruence

函数执行的时候先在自己的作用域查找,没有的话才去上级作用域。
而上级作用域是看他在哪定义的,而不是在哪执行的。
所以会找到上级-> 全局下的 name


echo函数自己的作用域没有定义name,所以它调用的上级全局name= 'laruence';
如果你在env函数里再写一个alert(name),那么就是name='eve',因为它本身的作用域定义了name.

总之。。这里env函数的作用域是不能影响echo函数的。。



相关阅读:
angular.js高级程序设计书本开头配置环境出错,谁能给解答一下
样式和类样式区别
关于this在浏览器中的指向
在node.js里面可以使用window对象的方法吗
angularjs如何将字符串类型的时间格式化呢
bundle-loader解析import异于ES6 module
video标签怎么控制播放内容的宽高?
IE兼容 React
弹出提示窗口JS怎么设置弹出一次,假设多弹出也要把前者取消,让后者弹出一次?
前端如何掌握必须的http知识?
在pfsense中启动barnyard2失败
scrapy怎么设置返回码不是200换代理
为什么有的公司要求DBA禁止使用between?
Laravel 如何获取路由名称?
前后端分离中碰到跨域问题大家是怎么解决的?
阮一峰老师《ECMAScript 6入门》第一节中的疑问
定时器中this为什么会指向window
backbone排序问题,视图实时排序
vuex中的state值,在工具类模块中怎么获取?
怎样用yii2.0配合mongodb做后台的权限控制系统???



快速导航

Copyright © 2016 phpStudy |