San*_*dze 4 javascript ajax jquery closures
function validateHistoryId(input) {
$.getJSON('request.php', {"action": "historyExists", "history_id" : input.value},
function(data) {
console.log(input.value);
}
);
}
Run Code Online (Sandbox Code Playgroud)
我从javascript函数使用jQuery ajax调用.我尝试了上面的代码并且它可以工作,但我不知道将来是否会引起任何问题.
我想知道,ajax回调函数可以看到它的父函数的变量吗?这样做是不好的做法?
Pet*_*tai 10
这是JavaScript功能性的做事方式.它被称为闭包:函数从其当前作用域和任何其他父作用域携带变量指针.因此,这不仅是一种良好的做法,而且这是您应该遵循的模式,而不是推动参数对象等.
请注意,"this"引用是特殊的,它永远不会关闭(与任何其他引用相对),因此始终将全局对象指向匿名函数.
事实上,开发人员需要一些时间来充分利用闭包功能 - 这是您刚才编写的基本示例.在更高级(而不仅仅是异步)方案中,闭包可以帮助您创建"即发即弃"行为,或者可以为您提供无法从客户端代码访问的"私有"变量(对库开发很有用).Closure还可以帮助您隔离代码,使其不会混淆全局范围.
1)示例:如何使用闭包创建受保护的变量.您可以访问两个可以访问"protectedVariable"的方法,但您无法自己访问它 - 因此可以保证控制.
function protectedScope(initData) {
var protectedVariable = initData;
return {
getter: function() { return protectedVariable; }
setter: function(v) { protectedVariable = v; }
}
}
var methods = protectedScope(10);
console.log(methods.getter());
Run Code Online (Sandbox Code Playgroud)
2)隔离:即使使用"全局"函数定义,下面的代码也不会淹没全局范围
var API = (function() {
var protectedVariable = 0;
var myNotGlobalFunction() {
return protectedVariable;
}
return myNotGlobalFunction;
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |