`

8 Function

阅读更多

1. arguments

 

在函数内部,arguments表示传入进来的参数,是个类似数组的Object。

 

		function add(x, y, z) {
			if (arguments.length != 3) {
				throw new Error("f should called with 3 arguments!");
			}                                                        
			return x + y + z;
		}           
		
		function max(/* ... */) {
			var rst = Number.NEGATIVE_INFINITY;
			for (var i = 0 ; i < arguments.length; ++i) {
				if (arguments[i] > rst) {
					rst = arguments[i];
				}
			}                          
			return rst;
		}         
		     
	    var f = function(x) {if (x <= 1) return 1; else return x * arguments.callee(x-1);}
		document.write("1 + 2 + 3 = " + add(1, 2, 3) + "<br>");
		//! document.write("1 + 2 = " + add(1, 2) + "<br>"); //throws Error 
		document.write("the max of 1, -10, -100, 2000, 5000, -10000 is "
		               + max(1, -10, -100, 2000, 5000, -10000) + "<br>"
		               );                                                                    
		document.write("4! = " + f(4) + "<br>");           

 

 

2. Javascript对待function其实和数据是一样的。

 

function add(x,y) {return x + y;}
		function sub(x,y) {return x - y;}
		function mul(x,y) {return x * y;}
		function div(x,y) {return x / y;}
		
		function operate(operator, op1, op2) {
			return operator(op1, op2);
		}                             
		                                                              
		// i = (2 + 3) + (4 x 5)
		var i = operate(add, operate(add, 2, 3), operate(mul, 4, 5));   
		document.write("(2 + 3) + (4 x 5) = " + i + "<br>");     
 

 

3. 可以把一个function当作data赋值给一个object,这时这个function就是这个object的方法。

并且可以使用关键字this

 

 var calculator = new Object();
		calculator.op1 = 1;
		calculator.op2 = 2;
		calculator.op = function() {
			this.result = this.op1 + this.op2;
		}                                     
		calculator.op();
		document.write("1 + 2 = " + calculator.result + "<br>"); 
 

 

4. length 和 callee两个属性

 

function check(args) {
			if (args.length != args.callee.length) {
				throw new Error("Wrong number of arguments!!!");
			}
		}    
		function add1(x, y, z) {
			return x + y + z;
		}                                                   
		function add2(x, y, z) {
			check(arguments);
			return x + y + z;
		}                    
		document.write(add1("I", " love", " you!") + "<br>");
		document.write(add1("I", " love") + "<br>");
		document.write(add2("I", " love", " you!") + "<br>");
		document.write(add2("I", " love") + "<br>");                
 

 

5. call()和apply两个方法

 

 function foo(x) {
    	document.write(x + "<br>");
}    
foo(10);                          
foo.call(null,10); 
 

 

6. closure

 

7. Function -- 作用域是不太一样的

 

var y = "global";
function constructFunction() {
    var y = "local";
    return new Function("return y");  // Does not capture the local scope!
}
// This line displays "global" because the function returned by the
// Function() constructor does not use the local scope. Had a function
// literal been used instead, this line would have displayed "local".
alert(constructFunction()());  // Displays "global"
 
分享到:
评论

相关推荐

    Chapter 8 function-homework.ipynb

    Chapter 8 function-homework.ipynb

    Java 8 Function函数式接口及函数式接口实例

    在Java 8中,`Function`接口是这些接口的一个典型代表。 `Function, R&gt;`接口位于`java.util.function`包下,它定义了一个从类型`T`到类型`R`的转换方法`apply(T t)`。这个接口允许我们定义一个接受一个参数并返回一...

    Java8通过Function获取字段名的步骤

    Java8通过Function获取字段名的步骤 Java8通过Function获取字段名是指在Java8中使用Function函数式编程来获取Java对象的字段名。这个步骤主要解决了硬编码的问题,效果类似于MyBatis-Plus的LambdaQueryWrapper。 ...

    MATLAB的S-Function编写指导

    8. **采样时间** - 采样时间是指S-Function更新其输出的频率。 - S-Function可以有固定的采样时间,也可以是可变的。 #### 结论 通过上述章节的介绍,我们对MATLAB的S-Function有了全面的理解。S-Function不仅...

    Java 8 的 Consumer、Supplier、Predicate和Function理解

    总之,理解并熟练使用Java 8的Consumer、Supplier、Predicate和Function接口,对于提升代码质量、减少冗余代码以及编写更高效的程序具有重要意义。在日常开发中,应尽可能利用这些接口来实现简洁的函数式编程风格。

    SAP Partner function

    SAP Partner Function 的两重值之迷 在 SAP 系统中,Partner Function 是一个非常重要的概念,它在业务流程中的应用非常广泛。今天,我们来讨论一个关于 Partner Function 的两重值的问题。这个问题来自于一个报表...

    VC,VB,C#与flash8结合开发中callfunction的运用

    ### VC、VB、C#与Flash 8 结合开发中 CallFunction 的运用 在软件开发领域,特别是多媒体应用开发过程中,结合使用不同的编程语言和技术框架是常见做法之一。本篇文章将详细探讨如何利用Visual C++(简称VC)、...

    S-Function 的编写.rar

    S-Function 可以使用MATLAB®,C,C ,Ada,或Fortran 语言来编写。使用MEX 实用工具,将C,C ,Ada,和Fortran 语言的S-Function 编译成MEX-文件,在需要的时候,它们可与其它的MEX-文件一起动态地连接到MATLAB 中...

    FAST v8 S_function

    FAST v8 版本S_function 的资源,可以在Simulink中利用NREL的FAST code 进行风力机的仿真

    db2 function 和 procedure

    3. **调用函数**:在SQL查询中,我们可以通过函数名和参数来调用这个函数,如`SELECT add_numbers(3, 5)`,它将返回8。 4. **注意事项**:函数必须是确定性的,即对于相同的输入,总是返回相同的结果。此外,函数...

    Actionscript 中 Function的使用

    // 输出 "8" trace(multiplyByThree(4)); // 输出 "12" ``` 四、闭包 闭包是ActionScript中一个强大的特性,它允许函数访问并操作其外部作用域的变量,即使在其定义的作用域之外。这在处理异步操作、缓存或延迟...

    MATLAB的S-Function编写指导以及一些例子

    8. **非线性PID控制器**:在`利用Matlab的S_Function实现非线性PID控制_周英玉.caj`文件中,可能详细阐述了如何利用S-Function构建一个非线性PID控制器,这通常涉及到将传统的PID算法扩展到包含非线性特性,如饱和、...

    benchmark function

    8. Rotated hyper-ellipsoid function:旋转的超椭球函数,增加了寻找最小值的难度,测试算法对目标函数旋转不变性的处理。 9. Sum of different power function:不同幂次之和函数,挑战算法处理非线性和不均匀...

    《MATLAB的S-Function编写指导》

    8. S-Function的命名规则与实现细节:文档中提到了"S-FUNCTIN"等可能由于OCR识别错误造成的术语,但可以理解为在编程S-Function时需要遵循特定的命名规则和实现规范,例如M-file开关标志(flag)以及如何设置系统...

    前端项目-function-plot.zip

    8. **插件系统** function-plot具有丰富的插件系统,可以通过安装和使用插件来增强功能,例如添加缩放、平移、图例等交互功能。 9. **社区与文档** 函数-plot拥有活跃的开发者社区,提供了详尽的文档和示例,帮助...

    使用S-Function函数实现离散PID控制器,并建立simulink仿真模型

    8. 仿真:运行Simulink模型以观察系统性能,可以调整参数以优化控制效果。 在给定的压缩文件中,2b2bed25b1084efa8a99f6b57a25efc7可能是包含了具体实现的S-Function源代码文件或相关文档。通过解压并研究这些文件...

    ASP开发中有用的函数(function)集合

    If Mid(server_v1, 8, Len(server_v2)) &lt;&gt; server_v2 Then chkpost = False Else chkpost = True End If End Function ``` 该函数的工作原理是通过比较HTTP_REFERER头中的URL与当前服务器名称是否一致来判断。...

Global site tag (gtag.js) - Google Analytics