[interview]171202

本文探讨了JavaScript中this关键字的行为变化及其在不同上下文中的表现,包括普通函数调用与构造函数调用的区别。此外,还分析了变量作用域、函数返回值以及逗号运算符等细节。

Q1: this

var foo = '123';

function print() {
    this.foo = '234';
    console.log(foo);
};
print(); 

var foo = '123';

function print() {
    //AO -> this{} -> window.foo{}  
    //GO -> {foo:undefined}   预编译
    //GO -> {window.foo:123}  执行第一行
    //GO -> {window.foo:234}  执行第二行
    this.foo = '234';
    console.log(foo);
};
print(); //234

Q2: this

var foo = '123';

function print() {
    this.foo = '234';
    console.log(foo);
    console.log(this.foo);
};
new print(); 

var foo = '123';

function print() {
    //AO -> 只有一个this -> {} (this不再指代,自身创建一个对象this{foo = '234'})
    //GO -> {foo : undefined}
    //GO -> {foo :123}
    this.foo = '234';
    console.log(foo);
    console.log(this.foo);
};
new print(); //123

Q3: 执行

function print() {
           bar.a = 'a';
           Object.prototype.b = 'b';
           return function inner() {
               console.log(bar.a);
               console.log(bar.b);
           }
}
print()(); //说明第一次执行完返回一个函数继续被执行
           //第一次执行进行赋值,返回函数inner
           //第二次执行函数inner,输出结果

Q4: 逗号运算符

var num = (1, 2); //逗号运算符,分别执行,保留后面的值
console.log(num);

var f = (function h() {return '1'}, function g(){return 2})();
console.log(1 + typeof f, f);

Q5: 函数表达式

var x = 1;
if(function f(){}){//把函数放到括号里变成表达式 执行完undefined
    x += typeof f;
}
console.log(x);
//1undefined

Q6:类数组

var obj = {
    2: 'a',
    3: 'b',
    length: 2,
    push: Array.prototype.push,
    splice: Array.prototype.splice
};

obj.push('c'); 
obj.push('d');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值