• 理解JavaScript【转】


    第一题

    if (!("a" in window)) {
        var a = 1;
    }
    alert(a);

    第二题

    var a = 1,
        b = function a(x) {
            x && a(--x);
        };
    alert(a);

    第三题

    function a(x) {
        return x * 2;
    }var a;
    alert(a);

    第四题

    function b(x, y, a) {
        arguments[2] = 10;
        alert(a);
    }
    b(1, 2, 3);

    第五题

    function a() {
        alert(this);
    }
    a.call(null);

    第一题:答案undefined
    js函数正式执行前会先处理函数声明、形参、变量声明(创建变量但是不赋值,赋值在代码执行阶段)。本例先在代码执行前处理变量声明,也就是解析器先弄一个变量a,但是没到函数执行呢,还不能给他赋值。所以有了变量a,注意是变量,全局变量相当于window的属性(其实不同,比如属性可以delete)所以”a” in window为true。

    如果本题改为

    if (!("a" in window)) {
        a = 1;
    }

    将不会优先处理变量声明,结果会不同。
    作为对比可以改为如下,同样根据上面的说明作答,大家自己试试。

    第二题:答案1

    只要记住一点,命名函数表达式的名字仅在所定义的函数内有效,由ecmascript作用域链的构建规则决定。

    第三题:答案 是一个函数

    按照第一题的解释中所说,先处理函数和声明和变量声明,所以a是一个函数,而var a不会改变赋值嘛,此后又没有赋值,所以a一直都是函数。

    第四题:答案10

    js每一个函数内都有一个隐含的arguments变量,是一个类数组结构,依次记录了参数的值,与参数同步更改。

    第五题:答案window

    没啥可说的,默认用window。

     都答对了么?

  • 相关阅读:
    Red Hat Enterprise Linux Server 5.5新增功能简介
    DNS Flood Detector让DNS更安全
    iPad之Linux平台实践
    Fedora 10下应用网络模拟器NS心得
    深入了解Linux远程桌面
    Linux下基于LDAP统一用户认证的研究
    Linux架设Jsp环境
    Fedora 13 Alpha测试手记横空出世
    高層タワー [MISSION LEVEL: B]
    機械の総合病院 [MISSION LEVEL: C]
  • 原文地址:https://www.cnblogs.com/allyh/p/10680141.html
Copyright © 2020-2023  润新知