gpt4 book ai didi

javascript - javascript 与 java 的闭包

转载 作者:行者123 更新时间:2023-11-29 18:31:30 26 4
gpt4 key购买 nike

我正在学习 javascript,我遇到了以下代码片段:

var outerValue = true;

function outerFn(){
assert( outerFn && outerValue, "These come from the closure." );
}

就我对上述上下文中的闭包的理解而言,它们允许 outerFn 实际上看到 outerValue 变量。

我的问题是:这与任何其他编程语言(例如 Java)有何不同?只是期望 outerValue 的范围将允许 outerFn 看到它。

稍后添加:

    var outerValue = true;
function outerFn() {
console.log(outerValue);
}

function anotherFunction(arg){
console.log("anotherFunction");
arg.call(this);
}

anotherFunction(outerFn);

那么这是一个更好的闭包示例吗?

最佳答案

将“clousures”理解为改变函数或方法执行范围的能力。这是一个示例,我们通过修改“client1”的范围为“May”和 client2 的范围“John”来运行相同的函数。这在 Java 中是不可能的。

<html>
<head>
<script type="text/javascript" src="jquery-1.5.2.min.js"></script>
<script type="text/javascript" >

function assert(condition, message) {
if (condition) {
alert(message);
}
}

function testClousures() {
var client1 = {name: 'Mary', code: 123};
var client2 = {name: 'John', code: 234};

function outerFn(){
assert( this.name == 'John', "These come from the closure." );
}

// Testing if client is John
outerFn.apply(client1); // Fail
outerFn.apply(client2); // Success

}

function domReady() {
$('#btn').click(function(){
testClousures();
});
}
</script>
</head>
<body onload="domReady()">
<br/>
<input id="btn" type="button" value="Test"></input>
</body>
</hmtl>

关于javascript - javascript 与 java 的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658951/

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