zoukankan      html  css  js  c++  java
  • 你自认为理解了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。

    亲!都对了么?

  • 相关阅读:
    sql except 用法,找两个表中非共同拥有的
    ‘堆’出你的洪荒之力
    原来你是个这样的JVM
    变形词
    54题
    最大对称子数组
    java 线程之间通信以及notify与notifyAll区别。
    大型网站架构系列:消息队列
    剑指offer第10题
    & 和 && 区别
  • 原文地址:https://www.cnblogs.com/kingwell/p/3199906.html
Copyright © 2011-2022 走看看