js--函数--定义函数的方法
来源:互联网 发布:Python For Finance 编辑:程序博客网 时间:2024/04/28 14:17
函数部分分为几个部分:
1.本篇文章介绍函数定义的方法
2.函数内部的对象
http://blog.csdn.net/github_34514750/article/details/51336321
3.函数属性和方法
http://blog.csdn.net/github_34514750/article/details/51336518
4.IIFE立即调用函数表达式
http://blog.csdn.net/github_34514750/article/details/52883401
1.创建函数的方法
创建函数的方法是函数声明,函数表达式,通过函数构造器创建
函数声明
function 函数名称 (参数:可选){ 函数体 }
function foo(){} // 声明,因为它是程序的一部分(function(){ function bar(){} // 声明,因为它是函数体的一部分})();
函数表达式
function 函数名称(可选)(参数:可选){ 函数体 }
无函数名的肯定是函数表达式var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分,虽然FE赋值给了一个变量(也就是参数),函数将该表达式保存在内存中,并通过变量名来访问(因为变量影响变量对象)new function bar(){}; // 表达式,因为它是new表达式(function foo(){}); // 函数表达式:包含在分组操作符内,是因为括号 ()是一个分组操作符,它的内部只能包含表达式// 在数组初始化器内只能是表达式[function bar() {}];// 逗号也只能操作表达式1, function baz() {};
函数构造器创建
既然这种函数对象也有自己的特色,我们将它与FD和FE区分开来。其主要特点在于这种函数的[[Scope]]属性仅包含全局对象;
//函数bar的[[Scope]]属性不包含foo上下文的Ao——变量”y”不能访问,变量”x”从全局对象中取得。var x = 10;foo();function foo() { var x = 20; var y = 30; var bar = new Function('console.log(x); console.log(y);'); bar(); // 10, "y" 未定义}
函数声明和函数表达式的区别
1.函数声明FD在进入上下文阶段创建,在代码执行阶段就已经可用了
函数表达式则是在代码执行阶段创建
—所以函数声明可以提升,但是函数表达式无函数声明提升的特性
sayName();//Namefunction sayName(){ alert("Name");}sayName();//报错,函数不存在var sayName = function(){ alert("Name");}
2.函数声明影响变量对象VO,也就是存储在上下文的VO中的变量对象
函数表达式不影响变量对象VO,不存在于变量对象中(那样意味着既不可能通过名称在函数声明之前调用它,也不可能在声明之后调用它)。但是,FE在递归调用中可以通过名称调用自身。
// FE在定义阶段之前不可用(因为它是在代码执行阶段创建)alert(foo); // "foo" 未定义(function foo() {});// 定义阶段之后也不可用,因为他不在变量对象VO中alert(foo); // "foo" 未定义
(function foo(bar) { if (bar) { return; } foo(true); // "foo" 是可用的,因为递归调用中可以通过名称调用自身})();// 在外部,是不可用的foo(); // "foo" 未定义
//表达式,因为它是赋值表达式的一部分,虽然FE赋值给了一个变量(也就是参数),函数将该表达式保存在内存中,并通过变量名来访问(因为变量影响变量对象)var foo = function () { alert('foo');};foo();
3.函数声明只能出现在程序或函数体内。从句法上讲,它们 不能出现在表达式或者Block(块)({ … })中,例如不能出现在 if、while 或 for 语句中。因为js无块级作用域,只有函数和全局作用域。
函数表达式则在源码中须出现在表达式的位置
// 函数可以在如下地方声明:// 1) 直接在全局上下文中function globalFD() { // 2) 或者在一个函数的函数体内 function innerFD() {}}
// 千万别这样做!// 因为有的浏览器会返回first的这个function,而有的浏览器返回的却是第二个if (true) { function foo() { return 'first'; }}else { function foo() { return 'second'; }}foo();// 相反,这样情况,我们要用函数表达式var foo;if (true) { foo = function() { return 'first'; };}else { foo = function() { return 'second'; };}foo();
函数表达式的有优点 – 不污染全局变量
//在代码执行阶段通过条件语句进行创建FE,不会污染变量对象VO。var foo = 10;var bar = (foo % 2 == 0 ? function () { alert(0); } : function () { alert(1); });bar(); // 0
- js--函数--定义函数的方法
- JS函数的定义与调用方法
- js定义函数的三种方法
- JS函数的定义与调用方法
- JS函数的定义与调用方法
- js定义函数的几种方法
- JS函数的定义与调用方法
- js function定义函数的方法
- js的函数定义
- js function定义函数的几种方法
- js function定义函数的几种方法
- JS 定义并立即执行匿名函数的方法总结
- js函数的多种定义方法与区别
- Eclipse中搜索js中定义的方法(函数)
- js:深入函数的定义
- js:深入函数的定义
- JS 函数的定义(一)
- javascript定义函数的方法
- 慕司板编程说明 -- 慕司板IAP15
- 跳台阶问题及其进阶
- POJ2395 Out of Hay(最小生成树)
- 高雄访谈
- goto gamedev blog
- js--函数--定义函数的方法
- SuferfaceView --- View的孪生兄弟
- tar.xz文件压缩和解压
- 磁盘阵列RAID
- MTLRenderPassDescriptor
- 数据仓库和数据集市的区别
- 三言两语说shader(五)轮廓描边
- MFC-WM_CTLCOLOR消息绘制控件颜色
- ros 初始化和关闭