javascript判斷下拉式選單的值從而給變數賦值 親測可用。 你要把那個變數i的定義放到初始化函數內,而不應該定義為一個全域變數。 ##稍快 快 慢 稍慢 ## javascript中匿名函數賦值給變數與直接命名函數有什麼不同 本來不喜歡回答這種這麼泛的問題。但比較受不了看到有其他錯誤答案誤人子弟,所以還是簡單的回答一下吧。 兩種寫法最大的差別是: var init = function() { }; 是函數表達式,函數在程式碼執行的到目前行的時候才被執行,init 才被賦值。 function init() {} 是函數的聲明,和 var 一樣,會提前到程式碼最前面定義。 所以,下面的兩個例子: foo(); // 在函數宣告之後呼叫 foo,可以正常呼叫。因為 foo 提前到最前面定義了。 function foo() { return true; } foo(); // 在函數表達式之前呼叫函數,報錯。因為這時候還沒有 foo 這個變數。 var foo = function() { return foo; };ES5 規定,函數只能在頂級作用域和函數作用域中聲明,否則是不合法的。例如: if( true ) { // 非頂級和函數作用域內定義函數,是錯誤的,雖然可能瀏覽器不一定會拋出錯誤,但是是不規範的。 function foo() { return true; } } ES6 引入了區塊級作用域的概念,這種定義方法就被允許了。在區塊級作用域裡面宣告的函數,作用域類似於使用 let 宣告的變量,在區塊級作用域之外沒有辦法被呼叫。 例如: { function foo() { return true; } } foo(); // 在函數宣告的程式碼區塊之外呼叫函數,會拋出錯誤。