美文网首页技术篇
你不知道的javascript读书笔记(上)------第二章

你不知道的javascript读书笔记(上)------第二章

作者: guojiaxing | 来源:发表于2018-05-14 11:34 被阅读0次

    作用域有两种工作模型

    1.词法作用域

    2.动态作用域

    查找

    作用域查找会在找到第一个匹配的标识符时停止

    无论函数在哪里被调用,也无论如何被调用,它的词法作用域都只由函数被声明时所处的位置决定。

    运行时(欺骗)修改词法作用域 **(被严格模式影响-with被完全禁止,在保留核心功能的前提下间接或非安全地使用eval也被禁止)**

    方法一:eval()

    function foo(str,a){

    eval( str );

    console.log( a, b );

    }

    var b = 2;

    foo("var b = 3;",1 ) //1,3

    解释说明:当console.log(..)被执行时,会在foo(..)的内部同时找到a和b,但是永远也无法找到外部的b。

    正常情况下,js的机制是函数作用域内找不到变量时会去外部查找。

    类似的有setTimeout(..)和setInterval(..) [不提倡]

    第一个参数可以是字符串,其内容可以被解释为一段动态生成的函数代码。

    new function(..)

    最后一个参数可以接受代码字符串,并将其转化为动态生成的函数。

    语法略微安全一些 [尽量避免使用]

    方法二:with关键字

    with通常被当做重复引用同一个对象中的多个属性的快捷方式

    var obj = {

        a:1,

        b:2,

        c:3

    };

    //单调乏味的重复obj

    obj.a = 2;

    obj.b = 3;

    obj.c = 4;

    //简单的快捷方式

    with(obj) {

    a = 3;

    b = 4;

    c = 5;

    }

    相关文章

      网友评论

        本文标题:你不知道的javascript读书笔记(上)------第二章

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