日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试中遇到过的闭包~

發布時間:2024/8/26 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试中遇到过的闭包~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其實我本來想起的標題名字是為什么前端面試都要問閉包或當面試官問我閉包時,想了解什么,但是我又無法給出回答,怕別人為了尋找答案,點進來發現被欺騙了,這樣可不好。若是有看客能回答一下,那還真不錯。

阮大大說閉包是能夠讀取其他函數內部變量的函數,我覺得這一句話就足以讓我了解閉包了。網上將閉包的博文太多了,我貼點兒栗子吧,有助于自己對閉包的理解。

function foo(x) {var tmp = 3;return function (y) {alert(x + y + (++tmp));} } var bar = foo(2); // bar 現在是一個閉包 bar(10);
//16

這是在網上看到的一道筆試題:問a、b、c分別輸出什么

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);
var?b = fun(0).fun(1).fun(2).fun(3);
var?c = fun(0).fun(1);? c.fun(2);? c.fun(3);
//undefined, 0, 0, 0
//undefined, 0, 1, 2
//undefined, 0, 1, 1

你做對了嘛?

第一個undefined,是o一開始沒有傳值,所以是undefined

a = {fun: function(m) {return fun(m,0); } }
a.fun(1) -> fun(1,0);
a.fun(2) -> fun(2,0);
a.fun(2) -> fun(3,0);

fun(0).fun(1) -> fun(1,0);
fun(0).fun(1).fun(2) -> fun(2,1);
fun(0).fun(1).fun(2).fun(3) -> fun(3,2);

c = {
  fun: function(m) {
    return fun(m,1);
  }
}
c.fun(2) -> fun(2,1);
c.fun(3) -> fun(3,1);

看懂了么,如果沒看懂,這兒有更詳細的講解http://developer.51cto.com/art/201511/498268.html

var name = 'global'; var obj = {name : 'obj',dose : function(){this.name = 'dose';return function(){return this.name;}} } alert(obj.dose().call(this))
//'global'

你做對了嘛?

var aaa = obj.dose() -> return this.name
aaa.call(this) -> window.name

call(this)相當于將函數運行環境中的this對象替換成window

來,看看下面這個會輸出什么呢?(這個題很經典,因為我曾經面試時遇到過!!)

<ul id="test">
? <li>這是第一條alert(0);</li>
? <li>這是第二條alert(1);</li>
? <li>這是第三條alert(2);</li>
</ul>
<script type="text/javascript">
? var elements = document.getElementById('test').querySelectorAll('li');
? for (var i = 0; i < elements.length; i++) {
? ? elements[i].onclick = function () {
? ?   alert(i);
? ? }
 ?}
</script>

//點擊每一條都alert:2

click方法中的i是一直隨著for循環累加的,它沒有在i=0或者i=其他時,記錄下這個值,所以alert出的是最后i的值2

?先醬~等我遇到再慢慢積累,第三篇嘍~堅持住~[我最棒!!]

轉載于:https://www.cnblogs.com/lulubai/p/6016785.html

總結

以上是生活随笔為你收集整理的面试中遇到过的闭包~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。