いえば 閉鎖 特性JSが言及する必要があり、多くの伝統的な言語は、JAVA、Cなどというように、そのような特性を持っていないです、。
読む前に、クロージャが何であるかを理解することは常に良いです!ここで手描きこれを理解するための概略図で示します:
まず、実質的にすべてのプログラミング言語が同様の特性を有する、親クラスのメソッドのローカル外部属性にアクセスすることができる方法は、すなわち、サブクラスまたはサブメソッドは、親クラスのリソースにアクセスすることができます。
<!-- 在正常的脚本中,某个方法可以获取到外部的变量,或者全局变量 -->
var num = 11;
function func1(){
console.log(num);
}
func1();
したがって、上記のコードでは、我々はNUMの値を取得することができます。
親はそれを行うためのサブウェイの値の内部に入ることができますか?
function func2(){
var num1 = 22;
num2 = 33;
}
func2();
<!--console.log(num1); 会报错!-->
console.log(num2); <!--可以获取到num2的值,因为不使用var定义变量时,默认是全局变量 -->
可変サブ方法の範囲はサブ範囲の唯一の方法であるため、当然のことながら、外部を取得することができないではありません。
それでは、どのようにそれはローカル変数のサブメソッドに外得ることができます!
Javaの場合は、私有財産のクラスには、のような、公共のgetメソッドで取得できます。
class Person{
private String name;
public String getName(){
return name;
}
}
なお、この方法の方法によって取得することができ、この方法の方法で所望の変数の値を読み取るために、JSのローカル変数に、私有財産の種類、その内部に上記の方法によって得ることができます。
function func3(){
var num3 = 44;
function func4(){
return num3;
}
return func4;
}
var func = func3();
console.log(func());
次の図への参照:
FUNC3ローカル変数の内側に外を取得することができませんが、内部FUNC3ローカルアプローチのFUNC4だけに取得することができ、そのため のFUNC4への参照を返します ので、あなたは、内部変数の外に取得することができますが、このFUNC4てFUNC3。
円の周りが、しかし外部メソッドの内部にそのような値によって得られます。
この方法では、局所的方法FUNC4クロージャと呼ばれ、本に従って概念の多くは、この方法は、外部リソースの内部は任意の方法を取得することができるように、内部の方法及びブリッジ方式外内蔵されています。
しかし、閉鎖がメモリに占領変数を永続的になりますので、いくつかのパフォーマンスの問題があるだろう、それも右だけでなく、実際のリリースで、簡単に使用するのが最善ではありません。
ソースの例:
<!doctype html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
<!-- 在正常的脚本中,某个方法可以获取到外部的变量,或者全局变量 -->
var num = 11;
function func1(){
console.log(num);
}
func1();
<!-- 但是在外部是无法获取方法内部的局部变量的 -->
function func2(){
var num1 = 22;
num2 = 33;
}
func2();
<!--console.log(num1); 会报错!-->
console.log(num2); <!--可以获取到num2的值,因为不适用var定义变量时,默认是全局变量 -->
<!-- 那么如何在外部获取到内部的变量呢!javascript可以办到 -->
function func3(){
var num3 = 44;
function func4(){
return num3;
}
return func4;
}
var func = func3();
console.log(func());
</script>
</body>
</html>
結果:
ます。https://my.oschina.net/u/204616/blog/545166で再現