最近在弄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聲明的作用域只在當前函數體內。