1.问:js中"1"+2+"3"+4 运算结果是?

答:1234

js中,字符串和数值相加,得到的还是字符串,这里的结果1234也是字符串。

2.问:4+3+2+"1"  运算结果是?

答:91 (从左至右的运算,前面是数值相加得到9,再和字符串相加得到91字符串。)

3.问:以下代码中,结果是?

var foo = 1; 
function bar() { 
    foo = 10; 
    return; 
    function foo() {} 
} 
bar(); 
alert(foo);

答:将输出1.  (这里访问的是window.foo,而不是bar里面的foo)

4.问:以下代码中,结果是?

function bar() { 
    return foo; 
    foo = 10; 
    function foo() {} 
    var foo = 11; 
} 
alert(typeof bar());

答:将输出function.(var foo = 11 虽然定义放在后面,但是变量会提升,所以最后的结果是function)

5.问:以下代码中,结果是?

var x = 3; 
var foo = { 
    x: 2, 
    baz: { 
        x: 1, 
        bar: function() { 
            return this.x; 
        } 
    } 
} 
var go = foo.baz.bar; 
alert(go());  
alert(foo.baz.bar());

答:3,1.

go = foo.baz.bar; go()此时this指向的是widow. window.x的值是3;foo.baz.bar()此时this指向的是baz,baz.x的值是1.

6.问:以下代码中,结果是?

var x   = 4, 
    obj = { 
        x: 3, 
        bar: function() { 
            var x = 2; 
            setTimeout(function() { 
                var x = 1; 
                alert(this.x); 
            }, 1000); 
        } 
    }; 
obj.bar();

答:输出4.

setTimeout方法是挂在window对象下的。setTimeout(匿名函数,time),这里的匿名函数形成了一个闭包,从而能访问到外层函数的局部变量。也就是window中的x。(参考

7.问:以下代码中,结果是?

x = 1; 
function bar() { 
    this.x = 2; 
    return x; 
} 
var foo = new bar(); 
alert(foo.x);

答:输出2.

这里的this指向的是bar的对象实例。

8.问:以下代码中,结果是?

function foo(a) { 
    alert(arguments.length); 
} 
foo(1, 2, 3);

答:3.

9.问:以下代码中,结果是?

var foo = function bar() {};  
alert(typeof bar);

答:undefined

10.问:以下代码中,结果是?

var arr = []; 
arr[0]  = 'a'; 
arr[1]  = 'b'; 
arr.foo = 'c'; 
alert(arr.length);

答:2, 输出arr的值是["a", "b"],不是很懂这里的结果。

11.问:以下代码中,结果是?

function foo(a) { 
    arguments[0] = 2; 
    alert(a); 
} 
foo(1);

答:2

12.问:以下代码中,结果是?

function foo(){} 
delete foo.length; 
alert(typeof foo.length);

答:number;foo.length的值还是0。delete无法删除,参考

13.问:以下代码中,

var name="the window"; 
var object={
  name:"my object",
  getName: function(){
    return this.name;
  } }

通过以下调用

object.getName();  
(object.getName)(); 
(object.getName = object.getName)()

结果是?

答:

第一行的代码,this指向的就是object,所以毫无疑问;第二行代码虽然加上括号,就好像只是在引用一个函数,但this的值得到了维持。因为object.getName和(object.getName)的定义相同。第三行代码,先执行一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是函数本身,所以this的值不能得到维持,结果就返回the window.


发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

使用Brotli提高网站访问速度知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。