2015-01-07 101 views
0

編輯我想要的功能,是全球訪問jQuery的功能範圍混亂

爲什麼myfunction0在DOM準備呼叫和myfunction1工作不工作?

external.js文件

(function($) { 

    // functions defined like that works 
    myfunction0 = function() { 
     console.log("hello world"); 
    } 

    // functions defined like that do not work 
    function myfunction1() { 
     console.log("hello world"); 
    } 

    })(jQuery); 

的index.html

<script> 
$(function() { 
    myfunction0(); // works 
    myfunction1(); // does not work not defined 
}) 
</script> 

做的第一函數的定義得到了全球範圍內,而僅次於 '文件' 的範圍是本地人?

+2

因爲'myfunction0'是全局的。 – undefined

+0

由於在 – Hacketo

+0

之前沒有關鍵字「var」不要隱式聲明變量,因此始終使用'var'關鍵字。 –

回答

1
function myfunction1() { } 

將是本地的範圍在其中定義。不是文件,而是匿名函數它包裹在。

myfunction0 = function() { } 

聲明一個變量(這恰好是一個函數)。

因爲沒有附加var,所以該變量獲取全局範圍。

1

您尚未使用var關鍵字聲明myfunction0,因此它已在全局範圍內聲明。聲明與其聲明的範圍相關聯。

如果您的var關鍵字添加到您的myfunction0(你應該),你會看到,無論是功能將可以訪問:

var myfunction0 = function() { 
    console.log("hello world"); 
} 

Example fiddle