Skip to content

Instantly share code, notes, and snippets.

@xydiva
Created May 16, 2018 10:04
Show Gist options
  • Save xydiva/5352b9348008c26a13249fafb4b6827c to your computer and use it in GitHub Desktop.
Save xydiva/5352b9348008c26a13249fafb4b6827c to your computer and use it in GitHub Desktop.
大叔手记(19):你真懂JavaScript吗?
if (!("a" in window)) {
    var a = 1;
}
console.log(a); // undefined

变量提升,在代码顶部申明var a = undefined"a" in window 会返回true,if语句不会执行。

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

b = function a(){} 这是一个函数表达式,而命名函数表达式的名字只能在函数内部使用,在函数外部无法被访问

function a(x) {
    return x * 2;
}
var a;
console.log(a); // fn a

函数声明会覆盖变量声明
但是如果此处变量赋值 var a = 1; ,则会覆盖函数声明,返回 1 。

function b(x, y, a) {
    arguments[2] = 10;
    console.log(a);
}
b(1, 2, 3); // 10

在实参个数>=形参个数的情况下,arguments和参数虽然引用不同的内存地址,但是也可以实现共享;但是如果参数个数不匹配,则会造成数据不一致。
此处如果参数只传了x和y,没有传a的话,会打印出undefined

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

这是一个不懂能答对,略懂的反而答不对的问题。因为有个需要特别注意的点:
根据ECMAScript262规范规定:如果第一个参数传入的对象调用者是null或者undefined的话,call方法将把全局对象(也就是window)作为this的值。所以,不管你什么时候传入null,其this都是全局对象window。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment