一、this和预解释
1.123456789101112131415161718var num = 5;//6 7var obj = { num : 4, //5 fn : (function (num){ num++; this.num++; //只执行函数的this是window var num=2; // 3 4 不会有第二次声明 return function (){ num++; this.num++; console.log(num); //3 4} })()};var fn = obj.fn; // fn与obj.fn指向同一个函数,但是同一个函数中this会产生差异fn(); //3 其中的this指的是 windowobj.fn(); //4 与fn指向同一个未被释放的栈内存,不同的只是thisconsole.log(this.num,obj.num); //7 5
arguments[0] –> 理解为于arguments.0
12345678910111213var len = 5;var fn = function(){console.log(this.len);console.log(this)};var main = {fn :function(fn){fn(); //fn是获取的就是全局fn函数。那么在这里执行fn函数中dethis是window,打印的就是window.len --》5arguments[0]();// arguments.0 ,这个函数里面的this是arguments -> undefined},len:10};main.fn(fn);预解释 + 实例化 + js运算符优先级
-
1234567891011121314151617function Foo() {getName = function () { alert (1); };return this;}Foo.getName = function () { alert (2);};Foo.prototype.getName = function () { alert (3);};var getName = function () { alert (4);};function getName() { alert (5);}//请写出以下输出结果:Foo.getName();getName();Foo().getName();getName();new Foo.getName();new Foo().getName();new new Foo().getName();
-
- 封装一个函数:把一个类数组转化成一个数组:123456789101112function toArray(a){try{//把slice中的this改为a,就变为了克隆a,并返回了;在ie8-都是不兼容的Array.prototype.slice.call(a);}catch(e){ //e是一个对象,e.message储存着try中的报错内容var ary = [];for(var i;i<a.length;i++){a[i]=ary[i];}return ary;}}