2014-03-01 69 views
0
function example(str) { 
var cache = (str != "") ? str : null; 
} 

example("something"); 
alert(cache); // cache is not defined 

在警報狀態時,表示緩存未定義。如何做到這一點,以便在調用函數之後,緩存將被保存,並且可以像alert(緩存)那樣調用它。緩存未定義錯誤

回答

1

自我記憶功能更加舒適

背誦是建設一個功能就是能夠 記住其先前計算值的過程。這可以通過避免已經執行的不必要的複雜計算來顯着提高性能。

function foo(str) { 
    if (!foo.cache) { 
     foo.cache = (typeof str !== undefined) ? str : null; 
    } 
} 

foo("something"); 

alert(foo.cache); 
+0

一個很好的答案,但有點矯枉過正的權利? foo在這裏記住什麼是什麼價值?記憶是爲了表現而不是基本的價值傳遞。不過,另一種有趣的分享狀態的方式。 –

2

變量'cache'在函數示例中定義,不在該範圍之外,所以alert不能訪問它。請看看其他類似的問題,例如:https://stackoverflow.com/questions/22113894/variables-from-anonymous-function/22114051#22114051;而不是10分鐘前。我還建議閱讀Javascript,尤其是如何使用變量作用域。這非常類似於大多數編程語言,但時髦的在其他幾個,例如:http://msdn.microsoft.com/en-us/library/bzt2dkta(v=vs.94).aspx

不推薦,但一個快速的回答是:

var cache; 
function example(str) { 
cache = (str != "") ? str : null; 
} 

example("something"); 
alert(cache); 
+0

,或者如果他可以擺脫'cache' VAR和使用'return'代替http://jsfiddle.net/xfmj2/ –

+0

大多數肯定可以做許多事情。我的鏈接突出顯示了幾個常規選項。 –

1

定義cachefunction exmaple()

var cache; 
function example(str) { 
    cache = (str != "") ? str : null; 
} 

當你在函數內部定義了函數的作用域,所以你不能從你的函數的外部訪問cache

2

cachelocal變量爲examplefunction。我建議使用namespace而不是globalvariable。如果它不會是一個全局變量,可以自由使用經典的var聲明。

這樣:

var app = app || {}; //define namespace 
app.cache = ""; 

function example(str) { 
    app.cache = str != "" ? str : null; 
    //i guess it should equal to: 
    // cache = str ? str : null; 
} 

console.log(str); //similar to alert, but logs in developers tool (chrome) or  firebug(FFx) 

PS:我建議使用console.log()(或debug),而不是alert()。它比alert()