美文网首页
2、词法作用域

2、词法作用域

作者: daisx | 来源:发表于2019-01-25 14:47 被阅读0次

词法作用域

简单地说,词法作用域就是定义在词法阶段的作用域。
换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变
词法作用域可以采取方法来进行欺骗操作,改变作用域,比如闭包


变量查找

引擎通过词法作用域中的各个变量的嵌套位置关系,来查找变量的正确信息。
作用域查找到第一个匹配元素就会停止查询。
遮蔽效应:多层嵌套中,外部作用域标识符会被内层作用域的同名标识符遮蔽


词法欺骗

eval()

接受一个字符串为参数,字符串是一段js代码,然后eval函数解析这段js代码并执行。

function foo(str, a) {
eval( str ); // 欺骗!
console.log( a, b );
}
var b = 2;
foo( "var b = 3;", 1 ); // 1, 3

foo函数执行以后,将var =3解析在了foo的作用域中,等于在函数作用域中追加了一个变量,并且遮蔽了全部的变量b,这样看起来就好像是对已经存在的foo函数作用域进行的认为的修改。


with

var obj = {
a: 1,
b: 2,
c: 3
};
//直接引用书写麻烦
obj.a = 2;
obj.b = 3;
obj.c = 4;
//with引用都就可以像使用变量一样引用对象属性
with (obj) {
a = 3;
b = 4;
c = 5;
console.log(a+b)  // 7,
}

建议

强烈不推荐使用 eval(..) 和 with

相关文章

  • 词法作用域

    作用域工作模式:1 词法作用域;2 动态作用域(Bash脚本、Perl中的一些模式) 2.1 词法阶段 词法作用域...

  • 词法作用域&动态作用域

    词法作用域(静态作用域) 词法作用域也叫静态作用域,jsvascript为词法作用域。词法作用域关心的是你的函数申...

  • 词法作用域

    我们知道JavaScript并不具有动态作用域,它只有词法作用域,什么是词法作用域? 一、 词法作用域 词法作用域...

  • 2.词法作用域

    JavaScript的作用域模型采用的是词法作用域 词法阶段 查找 欺骗词法作用域 既然词法作用域完全由编写时来决...

  • js中的作用域

    作用域就是决定变量有效范围 作用域按决定的时期来区分可分为词法作用域和动态作用域词法作用域: 词法作用域就是作用域...

  • JS基础-作用域与闭包

    1.理解词法作用域和动态作用域 词法作用域:定义在词法阶段的作用域换言之,词法作用域是由你在写代码时将变量和块作用...

  • 你不知道的JavaScript:词法作用域

    词法作用域 简单的说,词法作用域就是定义在词法阶段的作用域。词法作用域就是由你写代码时将变量和块作用域写在哪里来决...

  • 2、词法作用域

    词法作用域 简单地说,词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是由你在写代码时将变量和块作用域写...

  • 你不知道的 Javascript

    作用域 词法作用域:编译阶段确定(欺骗词法作用域 eval with) 块作用域 with try/catch l...

  • 第八节: JavaScript中this指向问题

    1. this指向问题 1.1 认识词法作用域 其实我们js中的作用域就是词法作用域,我们会发现词法作用域最重要的...

网友评论

      本文标题:2、词法作用域

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