美文网首页
javascript拾遗(2)

javascript拾遗(2)

作者: 非墨即白 | 来源:发表于2018-03-05 13:29 被阅读0次

”JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.”

全局作用域(Global Scope)

最外层函数和变量

在代码中任何地方都能访问到的对象拥有全局作用域

window对象的属性拥有全局作用域


vara=10;// 全局

(function(){

     var b=20;// 函数

})();

console.log(a);// 10

console.log(b);// error, b in not defined

eval("var a = 1;");// eval


作用域链(Scope Chain)

在 JavaScript 中,函数也是对象,实际上,JavaScript里一切都是对象

作用域的实现却和C/C++不同,并非用“堆栈”方式,而是使用列表,具体过程如下(ECMA262中所述):

任何执行上下文时刻的作用域, 都是由作用域链(scope chain, 后面介绍)来实现.

在一个函数被定义的时候, 会将它定义时刻的scope chain链接到这个函数对象的[[scope]]属性.

在一个函数对象被调用的时候,会创建一个活动对象(也就是一个对象), 然后对于每一个函数的形参,都命名为该活动对象的命名属性, 然后将这个活动对象做为此时的作用域链(scope chain)最前端, 并将这个函数对象的[[scope]]加入到scope chain中.

eg: 在调用func的时候, 会创建一个活动对象(假设为aObj, 由JS引擎预编译时刻创建, 后面会介绍),并创建arguments属性,

然后会给这个对象添加俩个命名属性aObj.lps, aObj.rps; 对于每一个在这个函数中申明的局部变量和函数定义,

都作为该活动对象的同名命名属性.

然后将调用参数赋值给形参数,对于缺少的调用参数,赋值为undefined。

var name = 'laruence';

function echo() {    

 alert(name);     

var name = 'eve';    

 alert(name);     

alert(age);} 

echo();

undefined//alert定义时的作用域链+alert自己参数+函数内均无name

eve

[脚本出错]

延长作用域链

有些语句可以在作用域链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除。有两种情况下会发生这种现象。

try-catch语句中的catch块

with语句

变量初始化阶段

JS解释器如何找到我们定义的函数和变量?

变量对象 (Variable Object, 缩写为VO) 是一个抽象概念中的“对象”,它用于存储执行上下文中的:

变量

函数声明

函数参数

VO按照如下顺序填充:

函数参数 (若未传入,初始化该参数值为undefined)

函数声明 (若发生命名冲突,会覆盖)

变量声明 (初始化变量值为 undefined,若发生命名冲突,会忽略。)

相关文章

  • JavaScript 拾遗

    JavaScript 拾遗

  • javascript拾遗(2)

    ”JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.” 全局作用域(Global...

  • 拾遗神兽目录

    拾遗神兽(番外篇)黑猫 拾遗神兽(1)水晶心的梦 拾遗神兽(2)新宠 拾遗神兽(3)初次交锋猫大爷 拾遗神兽(4)...

  • 你和高手间的差距,就是“简单”

    你和高手间的差距,就是“简单” 我是拾遗君 [营销最前线](javascript:void(0);) 昨天 导读 ...

  • javascript拾遗(1)

    https://www.quirksmode.org/js/this.html If you want to us...

  • JavaScript 拾遗(一)

    JavaScript 保留两位小数 箭头函数ES6 中新增的最激动人心的特性之一。=> 不只是函数关键字 func...

  • JS 拾遗

    重读阮一峰 《JavaScript 标准参考教程》一书。有沧海拾遗的感觉,偶有收获,记录下来,以便之后查阅... ...

  • javascript拾遗之对象

    js是基于简单的object-based paradigm设计的,每一个对象都是一些属性的集合,每一个属性是ke...

  • javascript拾遗之001

    一、JavaScript是什么? 定义:JavaScript是一种小型的、轻量级的、面向对象的、跨平台的客户端脚本...

  • javascript拾遗之002

    一、JavaScript两个常用的客户端输出方法 1.document.write(str):document是一...

网友评论

      本文标题:javascript拾遗(2)

      本文链接:https://www.haomeiwen.com/subject/wvfhfftx.html