昨天偶然看見乙個技術群裡面在討論一道js的邏輯題,很快就有人給出答案來了,但是我卻想了半天,這裡之所以記載,不是單純的記錄一種答案,而是多種,廢話不多說,直接上題目
定義乙個函式,比如:var repeatfun = repeat(alert, 10, 3000),呼叫repeatfun(『hellword』),會alert10次helloworld,每次間隔3s
看到這個題目,怎麼樣,你是直接出答案嗎?好吧,趁著還沒忘記,我這裡先記錄一下我開始寫這道題的感受吧,首先呢,看到這道題,前面半句我沒看懂,我知道它想讓我lert10次helloword,每次間隔3s,這是我讀題所知道的需求。但是我的神一樣的理解竟然變成了這樣:(哦,這是要我每間隔三秒alert10次helloword,好吧,然後這就是我的神邏輯,一直陷入死迴圈出不來,
好了不開玩笑了,還是言歸正傳的記錄答案。
首先呢,一位對es6語法很熟悉的大佬很快速的給出了答案,然後獲得了無數點讚,讓我們來看看神一樣的答案吧!
es6解題思路:
((str)=>
fn()
})('hellword')
怎麼樣是不是很快,但是好吧,也許你會說,我還沒有掌握es6語法呀,或者你想說,我們的專案裡面還沒有用到es6語法呀,怎麼辦呢。好吧,沒多大事,因為我就是沒有太掌握es6的語法,但是好在我能看懂es6,所以我將它翻譯成es5寫法了。下面就來看看翻譯後的答案吧!
es5解題思路:
function test(aa)
test02();
}test('helloword');
好了,看到這裡,本來以為,嗯差不多了,就是這樣,但是後來大佬又來了一種方法,我個人覺得很簡單明瞭,是什麼呢,你猜到了嗎,好吧,直接說吧,就是遞迴。如果暫時不給答案,你是否能用遞迴的思想做出來呢。好了這裡直接出答案吧!
遞迴解題思路:
const repeat = (msg, count) => , 3000);
}repeat('helloword',0)
下面給它翻譯成普通寫法:
function rr(ww,i)
},1000)
}rr('helloword',0);
還有一種方法,就是用到for迴圈,先看一下,我用for迴圈寫的答案吧!
用for迴圈解題思路:
function test(qq,count,e) ,duration * i)}}
}var repeatfun = repeat(alert, 3, 3000)
repeatfun('hellword')
上面是大佬的源**,未經改動,下面為了不懂es6的朋友著想,也為了自己更好理解,我給他翻譯成普通函式的寫法。
柯里化普通函式寫法:
function test(count,dur) {
return function test02 (text) {
for(let i=0;i好了乙個題目引發出來了很多知識點,感覺還是比較有意思的,這裡不多說了,感興趣的朋友還是去了解一下柯里化吧。另外結尾了丟一段**出來,思考一下兩者結果為何不同吧!
function test(count,dur) {
return function test02 (text) {
for(var i=0;i沒錯,這是我上面那段**的一點點小改變,但是結果卻是不同的哦。
一道有意思的邏輯題
在一條街上,有5座房子,噴了5中顏色。每個房子住著不同國籍的人。每個人喝不同的飲料,抽不同品牌的香菸,養不同的寵物。問題是 誰養魚?30分 2.瑞典人養狗 3.丹麥人喝茶 4.綠色房子在白色房子左邊 5.綠房子主人喝咖啡 6.抽pallmall香菸的人養鳥 7.黃色房子的主人抽dunhill香菸 8...
乙個有意思的問題
a b這個表示式如何理解?應該理解成a b還是a b,還是a b呢?應該按第一種方式理解。編譯的過程分為詞法解析和 語法解析兩個階段,在詞法解析階段,編譯器總是從前到後找最長的合法token。把這個表 達式從前到後解析,變數名a是乙個token,a後 面有兩個以上的 號,在c語言中乙個 號是合法的t...
乙個有意思的問題
最近做乙個交通管理系統,其中有個使用者投票功能。設想是直接開發乙個自定義的控制項。完成顯示,投票,ip檢索等全部功能。然而卻遇到乙個有意思的問題。具體來說就說,因為是用radiobuttonlist顯示的資料,在用radiobuttonlist.value捕獲使用者輸入時卻發現取出的索引始終為0.即...