JS递归、闭包、this
来源:互联网 发布:淘宝淘口令在哪里设置 编辑:程序博客网 时间:2024/05/20 10:52
一、递归
function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num-1); }}通过以下方式就会出错var anotherFactorial = factorial;factorial = null;alert(anotherFactorial(4)); //出错!
第一种改进方法:(在严格模式不能通过脚本访问arguments.callee)
function factorial(num){ if(num <= 1){ return 1; }else{ return num * arguments.callee(num-1); }}
第二种改进方式:
var factorical = (function f(num){ if(num <= 1){ return 1; }else{ return num * f(num-1); }});
二、闭包
闭包是说一个函数可以访问另一个函数的作用域中的变量。
for(var i=0; i<2; i++){ setTimeout(function(){ console.log(i); },0);}
上面这段代码的执行结果是2,2而不是0,1,因为等for循环出来后,执行setTimeout中的函数时,i的值已经变成了2,这就是没有隔离作用域所造成的,请看下面代码
for(var i=0; i<2; i++){ (function(i){ setTimeout(function(){ console.log(i); },0); })(i);}
这样就会输出0,1,创建的立即执行函数创建了一个作用域,隔离了外界的作用域。
缺点是闭包需要访问外部函数的变量,外部变量不能释放,闭包嵌套太多,会导致内存占用大
关于this对象
var name = "The Window";var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; }};alert(object.getNameFunc()());//"The Window"(在非严格模式下
var name = "The Window";var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; }};alert(object.getNameFunc()());//"The Window"(
结合下面的例子用闭包的方式来理解这个that就可以很好的理解了
var name = "The Window";var object = { name : "My Object", getName : function(){ return this.name; }};object.getName();//"My Object"(object.getName)();//"My Object"(object.getName = object.getName)();//"The Window" 在非严格模式下
第三行代码先执行了一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是函数本身,所以 this 的值不能得到维持,结果就返回了 “The Window” 。
0 0
- JS递归、闭包、this
- js this,闭包的使用
- js 闭包和this实例
- js的闭包和this
- js函数--闭包和this对象
- js 静态作用域 闭包 this
- js闭包函数和 this指针
- 【JS】【Core】函数,函数调用上下文this,闭包
- js闭包的理解以及闭包中this的理解
- Js函数深入理解-闭包中的this
- 重新认识JS的this、作用域、闭包、对象
- js递归和闭包简单案列
- 函数表达式(递归+闭包+this对象+私有作用域)
- 闭包 与 this
- this和闭包
- JavaScript 闭包 this
- 闭包、this指向
- 闭包中的this
- Fiddler真机抓包
- 欢迎使用CSDN-markdown编辑器
- Activity随着手指移动侧滑返回
- 接口测试工具SoapUI Pro5.1.2基本使用20150920
- 接口测试Fiddler实战20150921
- JS递归、闭包、this
- sklearn——朴素贝叶斯文本分类4
- iOS页面图层性能和页面卡顿的原因
- 安全性测试AppScan工具使用实战
- Java程序性能分析工具Java VisualVM(Visual GC)—程序员必备利器
- 深入浅出搜索架构引擎、方案与细节
- Built-in shader variables
- adb工具如何连接手机安装apk
- adb工具如何连接手机安装apk