函数作用域之闭包与this!】的更多相关文章

函数作用域和闭包  词法作用域   它们在定义它们的作用域里运行,而不是在执行的作用域运行,但是只有在运行时,作用域链中的属性才被 定义(调用对象),此时,可访问任何当前的绑定.   调用对象       当JavaScript解释器调用一个函数,它首先将作用域设置为定义函数时起作用的那个作用域链, 然后在作用域最前面加上一个新的对象(调用对象) 所以函数内定义的局部变量以及函数的参数,都添加到调用对象的属性上,这意味着,它们隐藏了作用域链上更上层的任何的同名的属性 (变量寻找路径)   作为闭…
在我们写代码写到一定阶段的时候,就会想深究一下js,javascript是一种弱类型的编程语言,而js中一个最为重要的概念就是执行环境,或者说作用域.作用域重要性体现在哪呢?首先,函数在执行时会创建作用域链,我们可以通过作用域链,向上一层一层的找到我们想要的变量.其次,搞清楚作用域,有利于深层次的理解闭包.再次,可以写出更加优化的代码,提高执行速度,防止内存溢出.可以说,作用域是一个核心. 如果大家知道c语言,可以知道块级作用域的特点,每一块都是局部的作用域,在if(){}外边是访问不了if里面…
前面你看到嵌套两层的函数,也许你有感而发,想来点刺激的对不?那么如果每层内的变量名如果相同会怎样?拿个例子看下就知道: 报错了,报错信息大意是,本地变量‘num’引用前没有被赋值定义.这咋回事,我外层不是定义了吗?这个问题就涉及到今天要说的话题——函数作用域 函数作用域 1.作用域分三个:本地作用域(local),函数内作用域(enclosing),全局作用域(global) 2.三个作用域的优先级规则是这样:L>E>G>B 这里的B是什么呢?是Built-in,眼熟不,好像在哪里用过对…
第一:函数作用域: L:local 函数内部作用域 E:enclosing       函数内部与内嵌函数之间(闭包) G:global            全局作用域 B:build_in          内置作用域 L > E > G > B          优先级比较 第二:闭包函数: 定义:如果内部函数引用了外部作用域(不是全局作用域)的变量,那么此时内部函数被称为闭包. def func1(): a = 10 def func2(): b = 20 return a +…
函数基础友情链接:http://speakingjs.com/es5/ch01.html#_functions 作用域链图解   var x = 1; function foo(){     var y = 2;        function bar(){         var z = 3;         alert(x+y+z);     }     bar(); } foo(); bar函数的scope chain为[0]bar.AO-->[1]foo.AO-->[2]global.…
函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表达式不需要,没有名字的叫匿名函数 2.在无法确定如何引用函数的情况下,递归函数就会变得比较复杂 3.递归函数应该始终使用arguments.callee来递归调用自身,不要使用函数名----函数名可能会发生变化 当函数内部定义了其他函数时,就创建了闭包.闭包有权访问包含函数的作用域和全局作用域,原理…
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Python是先从局部作用域开始搜索,如果局部作用域内没有找到那个名字,那么就在全局域找,如果还没有则抛出一个NameError异常. 一个变量的作用域和它寄存的名称空间相关,注意,局部变量会覆盖全局变量.如: bar = 10 def foo(): bar = 100 return bar global…
一.闭包 JavaScript中允许嵌套函数,允许函数用作数据(可以把函数赋值给变量,存储在对象属性中,存储在数组元素中),并且使用词法作用域,这些因素相互交互,创造了惊人的,强大的闭包效果.[update20170501] 闭包就是指有权访问 另一个函数作用域 中的变量 的函数 !!! 好处:灵活方便,可封装 缺点:空间浪费.内存泄露.性能消耗 由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存.过度使用闭包可能会导致内存占用过多,建议只在绝对必要时再考虑使用闭包.虽然像V8等…
js:闭包 var getNum; function getCounter() { var n = 1; var inner = function () {return n++; } console.log(n); return inner; } //第一步 getNum = getCounter(); //第二步 console.log(getNum());//1 //第三步 console.log(getNum());//2 //也许是这样?可能的情况1: //第一步 getNum指向了ge…
一.自定义函数function 函数就是功能.方法的封装.函数能够帮我们封装一段程序代码,这一段代码会具备某一项功能,函数在执行时,封装的这一段代码都会执行一次,实现某种功能.而且,函数可以多次调用. 1.1函数的定义和调用 语法: 定义:把需要实现的功能预先做好 执行:需要的时候执行这个功能,而且还可以执行多次 定义:function myName(){} 执行:myName() [语法解释]: function  定义函数的关键字 myName    函数名称 ()         参数集…