[TOC]
關(guān)于閉包
問題一:下面程序的輸出問題
for(var i=1;i<5;++i){
setTimeout(function timer(){
console.log(i);
},i*1000);
}
- 這個(gè)是最簡單的一個(gè),i會(huì)每秒輸出一個(gè)5
- 解決的方式很簡單,就是用閉包
for(var i=1;i<5;++i){
(function(i){
setTimeout(function timer(){
console.log(i);
},i*1000);
})(i);}
- 利用ES6 let-閉包的塊級(jí)作用域解決
for(let i=1;i<5;++i){
setTimeout(function timer(){
console.log(i);
},i*1000);}
問題二:下面程序輸出什么
var name = 'global';
var obj = {
name : 'obj',
dose : function(){
this.name = 'dose';
return function(){
return this.name;
}
}
}
alert(obj.dose().call(this))
//alert(obj.dose().call(obj)) 這樣寫能看出區(qū)別了```
* 這道題還是非常簡單的齐莲,但是一看到call,bind,apply之類的心就一緊分井,可能一慌張就答錯(cuò)了
**問題三:**在ES5中如何實(shí)現(xiàn)常量
* 這個(gè)問題一聽我就呵呵了糠聪,如何定義呢?沒錯(cuò)荷科,還是用閉包
* 實(shí)現(xiàn)的思路:把原來的參數(shù)隱藏唯咬。再利用閉包的特性,將參數(shù)存在內(nèi)存中畏浆,這樣參數(shù)不會(huì)消失副渴,也不能被更改
var consts=(function(){
var constant=10;
var p={};
p.get_consts=function(){
return constant;
}
return p;
})();
var gconst=consts.get_consts();
**問題四:**下面程序的輸出結(jié)果
* 參考
>http://developer.51cto.com/art/201511/498268.htm
function fun(n,o) {
console.log(o);
return {
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,?,?,?
var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,?,?,?
* 估計(jì)大部分人都看過,但是當(dāng)我初次見面之時(shí)全度,還是被嚇到了煮剧。哎,心理承受估計(jì)有點(diǎn)差了将鸵,答案就不貼了勉盅。感興趣的自己試試
## 關(guān)于JS語法
* 這道題我做的時(shí)候,是真的炸了顶掉,有幾個(gè)沒答對(duì)
* 參考
> http://www.cnblogs.com/xxcanghai/p/5189353.html
function 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);
}
//請(qǐng)寫出以下輸出結(jié)果:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
* 感興趣的朋友可以點(diǎn)鏈接去看看