關於js中全局和非全局以及立即運行的問題

最近在弄backbone.js的時候遇到了一點問題,讓我對JavaScript的變量作用域問題又理解深刻了點,在此記錄下。


自定義了一個app.js,使用的backbone的語法,定義了一個View,整個app.js結構大致如下:

(function(){

var ListView = Backbone.View.extend({


});

}());

此處使用了立即執行的函數表達式寫法。在jsp中我引用ListView的時候出現了異常,使用方式如下:

<script>
    var list = new ListView();
</script>

異常如下:

js中已經定義了ListView的,爲什麼會出現未定義。無奈去掉立即執行函數表達式,app.js結構變爲如下:

var ListView = Backbone.View.extend({


});

ok,執行成功,正確調用。這是什麼原因呢?猜測作用域的問題,再改變app.js,變爲如下:

(function(){

ListView = Backbone.View.extend({


});

}());

ok,執行成功,正確調用。去掉ListView前面的var聲明居然成功了。。。。。看來var聲明的作用域只在當前函數體內。


ListView = Backbone.View.extend({
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章