JavaScript变量作用域之我见
创始人
2024-07-26 03:00:37
0

相信大家都知道,JavaScript中变量作用域只有两种,全局作用域与函数中的局部作用域(有人认为不同script节点间也存在一种作用域,称之为段作用域,理由是在后面的script的节点中定义的变量,在这个script节点没有被解析之前,前面的script节点是不能访问这个变量的,这种依赖于代码解析顺序的特殊情况,不在我们这篇文章的讨论之列)。

比如下面的代码:

  1. var a = 1;  
  2. function f(b)  
  3. {      
  4. var c = 2;  

a就是我们声明的全局变量,c就是我们声明的局部变量,b作为函数f的形参,也是一个局部变量。

我们再看下面的代码:

  1. function outer()  
  2. {  
  3.     var o;     
  4.  function inner()  
  5. {  
  6.         var i;   
  7.    }} 

可以看到o和i都是局部变量,只不过o的作用域范围为函数outer的函数体,而i的作用域范围为inner的函数体。

我们再看一段代码:

  1. var g = 1;    
  2.  function outer(){        
  3.      var o = 1;       
  4.      function inner(){    
  5.    var i = 1;         
  6.     debugger;         
  7.      }         
  8.     inner();      
  9.  }    
  10.  outer(); 

debugger?没错,就是debugger。呵呵,我们单独运行这段代码,打开浏览器的调试环境,比如ff浏览器的firebug

javascript变量作用域之我见

我们选择脚本这一项,然后查看debugger运行时的调用堆栈情况,可以看到,除了有inner,outer以外,还有一个scope1.html()这么一个函数,这个函数从何而来的?

我们再看如下代码:

  1. debugger; 

javascript变量作用域之我见

可以看到,单独运行debugger的时候,firebug的调用堆栈只有一个scope1.html()这个函数被调用。

我们知道,此时是没有任何自定义的函数被调用的,那么这个函数从何而来的?我们不妨做如下大胆猜测,这是浏览器的js引擎自动生成的,我们所有的代码都运行在一个浏览器预先定义的一个函数里,而在这个函数里声明的变量,就是我们所谓的全局变量。

这样,我们就可以以一种一致的方式,去看待JavaScript代码:所有的代码都是以函数方式运行的,JavaScript的变量作用域只有一种,那就是函数的局部作用域。

以上言论纯属个人意见,有不同见解,欢迎拍砖。

ps:

1 关于scrope1.html()这个函数,在不同的调试环境下,命名可能不一样,比如ie下就是global script code,chrome下就是anonymous function。

2 推荐大家都运行一下上面的代码,查看一下函数运行时的调用堆栈以及变量的监控情况,对于理解JavaScript的作用域、作用域链、闭包等概念都有很大的帮助。

原文链接:http://www.cnblogs.com/rt0d/archive/2011/04/18/2019242.html

【编辑推荐】

  1. 泄露你的JavaScript技术很烂的五个表现
  2. 经典格斗游戏《街头霸王》的JavaScript实现
  3. 九个令人惊叹的HTML 5和JavaScript实验
  4. 分享7款超棒的JavaScript网格插件
  5. 对JavaScript中call和apply的理解

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...