我使用JQuery load
函數來append
(而不是替換)一些html數據到元素。我的問題是數據是加載函數上的this
範圍。不能使用() =>
。我如何訪問負載回調之外的變量?Typescript增益當前範圍或函數內變量
var element: JQuery;
$("<div></div>").load("http://www.google.de", function {
$(element).append(this);
});
我使用JQuery load
函數來append
(而不是替換)一些html數據到元素。我的問題是數據是加載函數上的this
範圍。不能使用() =>
。我如何訪問負載回調之外的變量?Typescript增益當前範圍或函數內變量
var element: JQuery;
$("<div></div>").load("http://www.google.de", function {
$(element).append(this);
});
在打字稿,當您使用() =>
語法,它實際上只是創建一個變量包含了「這個電流意思」,然後代用品this
用法調用生成的變量。您可以在需要this
的兩種含義的情況下手動執行此操作。
這裏有一些例子......在回調
正常使用this
。 this
是事件目標。
$('div').click(function() {
// this is the clicked element
alert('this: ' + this.id);
});
用於回調的TypeScript箭頭函數。 this
是詞法範圍。
$('div').click(() => {
// this is the lexical scope
// i.e. the containing class, containing function, or window
alert('this: ' + this.id);
});
手冊例如,創建一個名爲self
變量包含詞彙範圍,並留下this
是事件目標。
var self = this;
$('div').click(function() {
// this is the clicked element
alert('this: ' + this.id);
// self is the lexical scope
// i.e. the containing class, containing function, or window
alert('self: ' + self.id);
});
值得一銘記的JavaScript走在運行範圍鏈,因此,如果一個變量而不是一個函數的內部定義,JavaScript的檢查該變量的封閉功能。它一直在鏈上走,直到它檢查了全球範圍。
這個例子顯示了這個動作,但嵌套可以更深刻,它仍然有效(即innerFunction
內部功能仍可範圍步行才能到test
變量。
var example = function() {
var test = 'A test';
var innerFunction = function() {
alert(test); // 'A test'
}
innerFunction();
}
example();
正如你所期望的那樣。功能之外的任何變量是提供給您:
var element: JQuery;
var someOther = "123";
$("<div></div>").load("http://www.google.de", function(){
$(element).append(this);
$(this).text(someOther);
});
沒有真正期待這種行爲,我認爲範圍完全改變了,無論如何感謝你的簡短答案,有時你可以考慮其餘的。 –