js题集12

1. 实现下列语法

console.log(sum(2,3));   // Outputs 5

console.log(sum(2)(3));  // Outputs 5

答案:这道题,不解释,因为之前的问题里解答过。

知识点:javascript 函数柯里化

另外要加上形参判断。arguments.length

2.结果和why?

var a={},

    b={key:'b'},

    c={key:'c'};

 

a[b]=123;

a[c]=456;

 

console.log(a[b]);

答案:456

首先a[b] 这里面b最后显示成什么?

关于变量隐式转换,首先要确定,目标类型和原来类型,对象的a[]这种写法,里面添加的是属性名称

而属性名称--string类型

所以a[b],b的原类型是object,目标是string类型。

所以在

执行a[b],实际上是执行了a[b.toString()]同理

a[c]也一样

那么上面的代码阔以看做

a[b.toString()]=123;

a[c.toString()]=456;

Object类型的变量 执行toString() 结果都是同样的字符串。----"[object Object]"

所以a["[object Object]"]=123;

a["[object Object]"]=456;

最后输出。

3.

var hero = {

    _name: 'John Doe',

    getSecretIdentity: function (){

        return this._name;

    }

};

 

var stoleSecretIdentity = hero.getSecretIdentity;

 

console.log(stoleSecretIdentity());

console.log(hero.getSecretIdentity());

答案:这个,undefined,John Doe.

这个还用说么。。OOOOOOO---==

4.

var arr1 = "john".split('');

var arr2 = arr1.reverse();

var arr3 = "jones".split('');

arr2.push(arr3);

console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));

console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));

答案:这个自己好好看看api的说明,不得不说细节决定成败

5.

var myObject = {

    foo: "bar",

    func: function() {

        var self = this;

        console.log("outer func:  this.foo = " + this.foo);

        console.log("outer func:  self.foo = " + self.foo);

        (function() {

            console.log("inner func:  this.foo = " + this.foo);

            console.log("inner func:  self.foo = " + self.foo);

        }());

    }

};

myObject.func();

答案:执行一下就知道了。

知识点:闭包分割作用域的时候,this被分割了没有?

posted @ 2017-08-08 10:59  tong24  阅读(298)  评论(0编辑  收藏  举报