Javascript 高级 --作用域

      今天我们来谈谈计算机编程的作用域的问题和理解。

计算机在解读我们编写的代码时,也就是高级语言时,它会有一个编译,执行的过程,来翻译我们的高级语言,转化为二进制。在编译的时候,js引擎会在构造函数创建对象时,会产生原型来提高我们的运算效率,把共同的方法和属性挂载在原型上。来让不同的对象的实例来通过自动生成的原生链去访问原型的方法和属性。也就是通过内部的原型指针_proto_来一级一级的去寻找。当然,先把父级的对象实例替换成子级的原型。这是我们常用的原生链来继承。计算机在解读我们的编码时,会按照一定的顺序来解释。这个解读代码顺序是非常重要的。是我们看不见的机制。这是最基本的原理。首先是,计算机也就是js引擎先把全局变量的定义的操作先提升到顶部,只是提升的定义,不会提升定义的值和调用。然后,再执行到具体的局部作用域时,就会把具体作用域的定义的操作来提升到具体的作用域顶部。请看下面的例子。

   alert(a);   // 在全局作用域下,计算机首先是把全局的定义的变量来提升到顶部,只是定义的操作,所以,弹出的是undefinde;这是变量的提升的机制来帮助计算机提高效率。

  var  a = 12;

for (var i = 0;i<10;i++) { 

  var a = i;   // 

function change () {  

   alert(a);

   var a = 90;

   var b = 0;

}

   var c = 59;

  alert(change ());

我们可以类比的学习原型链的寻找模式,来理解作用链的寻找模式。

作用域链的寻找模式是从当前的作用域出发点,往上来寻找。寻找变量的。

var a  =10;

for  (var i =0;i<10;i++)  {  

var a = i;

}

alert(a);  // 注意是9.

这个题就是考证的作用域的机制。首先,js没有块级的概念。因此,for循环的i循环变量就是全局变量。在循环中,i的值等于9的时候,循环体就停止了。i给a的赋值就停止了。所以,a的值就是9.在执行alert时,又给a开辟新的空间,访问的是第二个a的空间保存的值。就是9了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,640评论 0 7
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 1,759评论 0 6
  • 继承 一、混入式继承 二、原型继承 利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的...
    magic_pill阅读 1,127评论 0 3
  • 诗:卿墨白 (携友赏荷记) 碧波掩映无穷尽, 友人两两伫荷前。...
    runzhi阅读 337评论 0 4
  • 参考文档:http://blog.flight.dev.qunar.com/2016/10/28/ios-even...
    yazho阅读 375评论 0 1

友情链接更多精彩内容