javascript函数表达式
来源:互联网 发布:linux 物理网卡 编辑:程序博客网 时间:2024/06/05 03:35
1、函数声明与函数表达式的差异之一:声明可以在被声明之前调用,由于函数声明提升的原因,而函数表达式可以看做是普通变量,因为不能在声明之前引用。
<!doctype><html><head><meta charset="UTF8"></head><script type="text/javascript"> function a(){ } console.log(a.name);//获取函数名称,在chrome、Safari、Firefox和opera中有效 //函数提升会导致一些意想不到的结果,如下所示 var condition = true; if(condition){ function b(){ console.log(true); } } else{ function b(){ console.log(false);//一般来说无论condition是true还是false,都会保留后一个 } } b(); //如果是函数表达式则没有任何问题,因为函数表达式不会被提升,如下 if(condition){ var c = function(){ console.log(true); } } else{ var c = function(){ console.log(false); } } c(); //函数的递归调用 function d(num){ if(num == 1){ return num; } else{ return num * arguments.callee(num-1); //此处尽量不要使用函数名,防止当函数名发生变化时,出现错误,但是在严格模式下不允许使用callee } } console.log(d(4)); //更靠谱的递归函数,适用于严格模式 var d = (function f(num){ if(num == 1){ return 1; } else{ return num * f(num - 1); } }); console.log(d(4)) //函数的闭包,有权访问另一函数作用域的函数 function e(name){ return function(){ console.log(name); } } var g = e('guoxiaofen'); g();//被闭包的函数,在父函数结束后,仍能访问其中的变量 g = null;//取消对匿名函数的引用,以便释放内存 //请注意闭包只能取得函数变量的最后一个值 function create(){ var result = new Array(); for(var i = 0 ;i < 10;i++){ result[i] = function(){ console.log('running' + i); return i; } } console.log('create finish'); return result; } var result = create(); console.log(result[1]());//10 console.log(result[4]());//10,请注意只会记录父函数的最后一个值 //修正方法: function create1(){ var result = new Array(); for(var i = 0 ;i < 10;i++){ result[i] = function(num){//将i复制一份存入临时参数num中 return function(){ return num; }; }(i); } console.log('create finish'); return result; } result = create1(); console.log(result[1]());//1 console.log(result[4]());//4 //关于闭包的this对象 var name = 'the window'; var o ={ name :'my o', sayName : function(){ return function(){ return this.name; } } } var say = o.sayName(); console.log(say());//the window,函数被调用时自动取得this和arguments对象, // 搜索这两个变量时,搜索到当前活动对象为止,即global对象,而不是外部闭包对象 var o1 ={ name :'my o1', sayName : function(){ var that = this; return function(){ return that.name; } } } console.log( o1.sayName()()); //意外的改变this值 var person = { name:'Andy', sayName:function(){ return this.name; } } console.log(person.sayName());//Andy console.log((person.sayName)());//Andy console.log((person.sayName=person.sayName)());//the window //Dom元素导致的内存泄露 //用闭包函数模仿块级作用域 function output(num){ (function(){ for(var i = 0;i<num;i++){ console.log(i); } })();// console.log(i);//undefined } output(2); //利用闭包定义私有变量,name修改只能通过get或者set函数访问 var highPerson = function(name){ this.getName = function(){ return name; }; this.setName = function(value){ name = value; } } var Andy = new highPerson('Andy'); console.log(Andy.getName()); Andy.setName('guo'); console.log(Andy.getName()); //</script></html>
0 0
- javascript函数表达式
- Javascript之函数表达式
- javascript函数表达式
- JavaScript函数表达式
- JavaScript函数表达式
- Javascript 函数表达式
- JavaScript的函数表达式
- JavaScript笔记:函数表达式
- JavaScript函数表达式
- JavaScript函数表达式
- 5 javascript 函数表达式
- javascript(函数表达式)
- JavaScript-函数表达式
- JavaScript函数表达式
- Javascript函数表达式
- JavaScript中的函数表达式
- javascript 函数表达式
- javascript正则表达式函数详解
- 数字图像处理领域的二十四个典型算法及vc实现、第二章
- 小工具 - 批量删除Maven下载失败的文件夹
- linux常用的命令
- shell初学1
- eclipse使用——创建work sets
- javascript函数表达式
- nyoj 44 子串和
- Ubuntu命令笔记
- 利用huffman树实现字符文档的压缩
- JQuery按照form下载文件+后台asp.net,非ajax(上)
- linux下redis的安装
- bimap转base64上传到服务器
- nginx 重中之重 event 模块
- ROS笔记