gpt4 book ai didi

javascript - js中的变量

转载 作者:行者123 更新时间:2023-11-30 13:08:59 26 4
gpt4 key购买 nike

我对 js 是一个菜鸟,今天我遇到了一些我不太了解但我很想了解的 js。你能解释一下吗?涉及剑道,但问题是普通的 js。

我有一个嵌套网格,例如。每行都可以扩展到其他网格中,并且每个网格都有自己的数据源。当用户单击时,我通过下面的方法一个一个地填充数据源,并且在从创建调用接收到异步响应时强制读取数据源时遇到了问题。 (调用 read 几乎是不正确的事情,但是 Kendo 有它自己的错误 - 这里不是重点。)我的问题是,我没有调用 read() 的实例,该方法只返回数据源并将其分配给网格,当事件返回时我找不到对任何我能得到正确的东西的引用数据源实例来自。这是这里的不同上下文。

为了解决这个问题,我在构建数据源的方法中添加了一个数据源变量,然后返回变量而不是数据源,这是一回事。然而,这有助于调用有问题的 read() on。现在,在我的创建处理程序中,我在 innit 期间在方法中返回的变量上调用创建。很好,但我不确定是否每个数据源都在 innit 之后调用自己的实例读取?

function _getDatasource() {
var datasource = new kendo.data.DataSource({
transport: {
read: {
url: serviceBaseUrl + "ReadQuestionnaire",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",

},
create: {
url: serviceBaseUrl + "CreateQuestionnaire",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
complete: function (jqXhr, textStatus) {
if (CheckForExceptions(jqXhr, textStatus) == false) {
// this is the variable I am not sure about
// after innit does this always refers to this same datasource ?
datasource.read();
}
}
}
}
});
return datasource;
}

最佳答案

您的解决方案是正确的,是的,datasource.read() 调用在每种情况下都是正确的数据源对象。

这就是它起作用的原因:闭包。

闭包是一种在一个函数中声明的变量可从嵌套函数访问的能力。或者,要获得更准确的描述,请参阅维基百科页面:http://en.wikipedia.org/wiki/Closure_(computer_science)

这是一个非常简单的例子:


function doStuff(){
var name = "Derick";

function sayMyName(){
console.log(name);
}

sayMyName();
}

doStuff();

在这个例子中,我在 doStuff 函数中声明了一个变量 name。然后我在第一个函数中嵌套另一个函数。 sayMyName 函数通过使用闭包访问 name 变量。

当我调用 doStuff() 时,变量被定义并赋值。然后定义 sayMyName 函数并使用该变量。然后我调用 sayMyName() 并将名称记录到控制台。

同样,在您的代码中,您正在创建一个分配给 DataSource 实例的变量。稍后,您将为 complete 回调定义一个函数。加载数据源并触发 complete 回调后,您将访问通过使用闭包分配给 DataSource 实例的相同 dataSource 变量变量。

由于您在每次调用 _getDataSource 时都声明了 var dataSource,因此您正在创建一个新的变量/引用,并分配给一个新的 DataSource 实例。我不认为你需要在你的函数的底部 return datasource ,虽然......至少,不需要 complete 回调函数工作。不过,也许您需要它用于此功能之外的其他用途?

有关 JavaScript 闭包的更多信息:

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures

How do JavaScript closures work?

http://www.javascriptkit.com/javatutors/closures.shtml

http://www.watchmecode.net/javascript-scope (付费截屏)

HTH

关于javascript - js中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14582725/

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