[英]Calling a function to define a variable
在函數內部,我得到:
var myType;
if ( $(this).is(".whatever") ){
myType = typeOne;
} else if ( $(this).is(".something") ){
myType = typeTwo;
}
這很好用。 但是,我想把它變成一個我可以調用的單獨函數,因為我在幾個不同的地方使用它。 我寫的功能是:
function setMyType(){
var myType;
if ( $(this).is(".whatever") ){
myType = typeOne;
} else if ( $(this).is(".something") ){
myType = typeTwo;
}
}
當我在main函數中調用setMyType()時,main函數無法訪問myType。 如果我在setMyType()內警告(myType),則警報包含正確的值。 但主要功能無法看到那個價值。
這是一個范圍問題,但我不確定如何解決它。 我嘗試在main函數中定義myType並將其傳遞給setMyType()。 雖然setMyType()從main函數中獲取myType的值就好了,但它仍然沒有將更改后的值返回給main函數。
您將從函數返回值,如下所示:
function getMyType(){
var myType;
if ( $(this).is(".whatever") ){
myType = typeOne;
} else if ( $(this).is(".something") ){
myType = typeTwo;
}
return myType;
}
// elsewhere:
var myType = getMyType();
將myType
放在全局范圍內(我添加了“g”,如全局前綴):
// in global scope
var gMyType = null;
function setMyType(){
if ( $(this).is(".whatever") ){
gMyType = typeOne;
} else if ( $(this).is(".something") ){
gMyType = typeTwo;
}
}
注意:我認為您需要更改$(this)
部分
您可以像@RC建議的那樣將其置於全局范圍內,或者您可以像這樣定義它:
function setMyType(){
if ( $(this).is(".whatever") ){
document.window.gMyType = typeOne;
} else if ( $(this).is(".something") ){
document.window.gMyType = typeTwo;
}
}
現在您可以從頁面上的任何位置訪問它:
alert(document.window.myType);
返回值可能是最好的解決方案,但這是另一個。 您可以將對象傳遞給作為作用域的函數,並將您的值設置為此對象的屬性。
如果您有一個方法來加載外部腳本以不污染全局命名空間,則通常會這樣做:
function setMyType(scope){
if ( $(this).is(".whatever") ){
scope.myType = typeOne;
} else if ( $(this).is(".something") ){
scope.myType = typeTwo;
}
}
將使用如下:
var scope = {};
setMyType(scope);
//now scope.myType contains your value
我不鼓勵你在你的情況下使用這個方法(返回值更有意義,更容易理解),但值得一提。
除非在閉包內設置函數,或者它是jQuery回調的一部分,它明確地將this
設置為事件處理程序元素,否則你將希望避免在函數內部依賴它,因為它將引用它自己。
function setMyType(obj){
myType = ($(obj).is(".whatever"))?typeOne:(($obj).is(".something"))?typeTwo:null;
return myType;
}
- 一個小三元的好措施 - 請注意,在這種情況下,如果對象確實在一個閉包中包含這個,只需設置this.myType = setMyType(this)
,如果你返回值,你將會很容易將它作為對象屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.