zoukankan      html  css  js  c++  java
  • JavaScript基础学习(六)—函数

    一、函数的定义

    1.function语句形式

    			//1.function语句式
    			function test1(){
    				alert("I am test1");
    			}
    			
    			test1();

    2.函数直接量形式

    			//2.函数直接量形式
    			var test2 = function(){
    				alert("I am test2");
    			}
    			test2();

    3.通过Function构造函数形式

         Function构造函数可以接收任意数量的参数,但最后一个参数始终都被看成函数体。我们不推荐使用,因为这种语法会导致解析两次代码,第一次是解析常规的JS代码,第二次是解析传入构造函数中的字符串,从而影响性能。

    			//3.通过Function构造函数形式
    			var test3 = new Function("a","b","return a + b");
    			alert(test3(10,20));

    4.三种方式的区别

         image

    			/*
    			 * 测试解析时机
    			 */
    			test1();// I am test1
    			function test1(){
    				alert("I am test1");
    			}
    			
    			test2();//报错
    			var test2 = function(){
    				alert("I am test2");
    			}
    			
    			alert(test3(10,20));
    			var test3 = new Function("a","b","return a + b");

         function语句是会被JS解析器优先解析。

    			/*
    			 * 测试函数作用域
    			 */
    			
    			var k = 1;
    			
    			function test(){
    				var k = 2;
    				
    				function demo(){
    					return k;
    				}
    				
    				var demo = function(){
    					return k;
    				}
    				
    				var demo = new Function("return k");
    				
    				//1.function语句式: 2
    				//2.function字面量式: 2
    				//3.Function构造函数式: 1
    				alert(demo());
    				
    			}			
    			
    			test();

    二、arguments对象

        JavaScript中每个函数内都能访问一个特别的变量就是arguments。这个变量维护着所有传递到这个函数中的参数列表。arguments变量不是一个数组,但是在语法上有数组相关的属性length。但它不从Array.prototype继承,实际上它是一个对象。因此无法对arguments变量使用标准的数组方法,比如push、pop等。虽然使用for循环遍历是可以的,但是为了更好的使用数组方法,最好把它转换为一个真正的数组。

    				alert("arguments[0] = " + arguments[0]); //1
    				alert("arguments[1] = " + arguments[1]); //2
    				alert("arguments.length = " + arguments.length);  //3
    				alert("arguments.callee.length = " + arguments.callee.length); //2
    				alert("arguments.callee = " + arguments.callee);
    				return a + b;
    			}
    			
    			add(1,2,3);
         从运行结果可以看出以下:

         (1)arguments.length: 实参的个数。

         (2)arguments.callee.length: 形参的个数。

         (3)arguments.callee: 代表当前正在执行的函数,它可以在匿名函数中通过callee递归调用自身。

    			function add(a,b){
    				
    				alert("arguments.callee.caller: " + arguments.callee.caller);
    				return a + b;
    			}
    			
    			function test(a,b){
    				add(a,b);
    			}
    			
    			test(1,2);
    结果:

         image

    结论:

         (1)arguments.callee.caller保存着调用当前函数的函数的引用。

  • 相关阅读:
    对象关系【继承】【依赖】【关联】【聚合】【组合】
    对象关系【继承】【依赖】【关联】【聚合】【组合】
    Spring使用p名称空间配置属性
    Spring使用p名称空间配置属性
    spring实例化bean的方式
    MS04011远程缓冲区溢出代码
    注入下载文件的代码到IE进程然后执行下载的文件
    缓冲区溢出漏洞发掘之整数范围限制浅析
    基于ICMP的木马的编写
    凯撒密文的破解编程实现
  • 原文地址:https://www.cnblogs.com/yangang2013/p/5440330.html
Copyright © 2011-2022 走看看