我想問一【CASE_B】中造成延宕10秒不會生效的原因為何?
我想問二【CASE_D】url不會代入的原因為何?
先謝謝各為前輩。
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
1.你必須先理解函數本身和函數執行後是不同的:
function test(s){
console.log(s)
return 2
}
// a是test這個函數本身
var a = test
// 可以正常執行,因為a = test,所以a("1") = test("1")
a("1")
// 顯示[Function: test],告訴你a就是test
console.log(a)
var b = test("1")
// 不能正常執行,會告訴你TypeError: b is not a function
b("1")
// 顯示2這個回傳值,因為b被指向test("1")的結果,也就是他的回傳值
console.log(b)
2.setTimeout你可以看MDN,會告訴你第一個參數必須是function或是code(字串)。
3.所以你傳入的,必須是個函數,以B來說,
location.replace('https://www.google.com')
這已經是結果了,所以setTimeout出錯。
所以你應該要這樣改:
function myFunction() {
try{
window.setTimeout(function(){location.replace('https://www.google.com')}, 10000);
} catch (e) {
alert(e);
}
}
或是把你的程式碼變成字串,js會把他用eval()去執行。但不建議。
function myFunction() {
try{
window.setTimeout("location.replace('https://www.google.com')", 10000);
} catch (e) {
alert(e);
}
}
D跟B一樣的狀況,不贅述,setTimeout後面可以帶參數給傳入的function
setTimeout(myFunc, 10000, "www.google.com")