关于闭包的一个有意思的地方
function Student(name){
var name = name || window;
this.getName=function(){
return name
}
}
var lilei=new Student("李雷");
lilei.getName();//"李雷"
console.dir(lilei.getName);
//可以看到<function scope>
// Closure
// name: "李雷"
// Global: Window
function Student(name){
var name = name || window;
this.getName=function(){
return "11";
}
}
var lilei=new Student("李雷");
lilei.getName();//"11"
console.dir(lilei.getName);
//可以看到<function scope>
// Global: Window
function Student(name){
this.getName=function(){
var name = name || window;
return name
}
}
var lilei=new Student("李雷");
lilei.getName();//window
console.dir(lilei.getName);
//可以看到<function scope>
// Global: Window
我知道js编译器会先定义好所有的变量,然后赋值,例如上面的,var name = name || window;会变成
var name;
name = name || window;
从上面的现象,得到简单结论:
1,形参是在所有变量定义前就定义好,并赋值的var name;对于已经存在的变量name是没影响的。
2,闭包是在JS引擎检测到函数依赖外部变量时,注入到函数的作用域中的。
3,如果要通过闭包调用函数外部变量,函数内不能定义相同变量名。因为如果定义了,闭包将不存在了。
...全文
相关推荐
C语言实现三种闭包算法(传递,自反,对称闭包)
**传递闭包**:可以使用二维数组表示关系,然后遍历数组的每一行和每一列,每次发现一个有效的路径,就更新传递闭包的矩阵。这个过程可能需要多次迭代,直到没有新的关系可以添加为止。2.
c# 闭包的相关知识以及需要注意的地方
C# 闭包的相关知识以及需要注意的地方C# 闭包是函数式编程的重要概念,但是C#作为面向对象的语言,也可以使用委托或lambda表达式来实现闭包。
JS闭包可被利用的常见场景小结
当函数在其被定义的作用域之外的地方被调用时,它仍能访问定义时的词法作用域,这便是闭包的特性。简单来说,闭包可以理解为是函数内定义的函数,它可以访问到其父函数作用域中的变量。
闭包 最详细的闭包解释 自己的私藏 简单易懂
闭包是JavaScript编程中至关重要的一个概念,它涉及到变量的作用域、内存管理和函数的特性。在JavaScript中,闭包是一种特殊的现象,它允许内部函数访问并操作外部函数的局部变量,即使外部函数
用矩阵求自反闭包自反闭包
自反闭包是指给定一个关系R,将其扩展为包含所有起点到自身的元素对,即对于每一个元素a,都有(a, a)属于自反闭包。这个过程在矩阵表示法中尤为直观。


