gpt4 book ai didi

javascript - 如何避免 CoffeeScript 方法变量被包裹在对象文字中?

转载 作者:行者123 更新时间:2023-11-30 07:27:36 25 4
gpt4 key购买 nike

CoffeeScript 将在对象文字中的方法内部声明的变量包装起来。

所以,这个:

@Templates =
get: (templateName) ->
result: '' # DECLARED HERE
$.ajax(
'Views/Templates/' + templateName + '.html',
type: 'GET'
dataType: 'html'
success: (data) ->
result = data # ASSIGNED HERE
async: false
)
return result # RETURNED HERE

变成这样:

(function() {

this.Templates = {
get: function(templateName) {
({
result: '' //DECLARED IN AN OBJECT LITERAL - I DON'T WANT THIS
});
$.ajax('Views/Templates/' + templateName + '.html', {
type: 'GET',
dataType: 'html',
success: function(data) {
var result; //DECLARED LOCAL TO THE CALLBACK - I DON'T WANT THIS
return result = data;
},
async: false
});
return result; //RETURNED HERE - UNASSIGNED
}
};

}).call(this);

但我需要的,对我有用的是:

(function() {

this.Templates = {
get: function(templateName) {
var result = '' //DECLARED HERE
$.ajax('Views/Templates/' + templateName + '.html', {
type: 'GET',
dataType: 'html',
success: function(data) {
return result = data; //ASSIGNED HERE
},
async: false
});
return result; //RETURNED HERE
}
};

}).call(this);

我做错了什么?我该如何解决这个问题?

最佳答案

您所谓的闭包不是闭包(JavaScript 中的闭包始终是函数)。它是一个包含在括号中的对象文字。

我不是很熟悉 CoffeeScript,但是如果你想让 result 成为 get 函数中的局部变量,我相信你想要改变

result: ''

result = ''

前者是对象初始化器格式(因此它被翻译成对象文字),后者是变量赋值。似乎在 lexical scoping 下的 CoffeeScript 网站上有所介绍.

关于javascript - 如何避免 CoffeeScript 方法变量被包裹在对象文字中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com