JavaScript——函数function

§ 函数

(1)函数
	□ a、函数字面量
		var say = function(){ }
	□ b、函数声明
		function say() { }
	□ c、匿名函数
		function() { }
		在被创建时立即调用
		(function () {} ) ()
		(声明) ()
	□ d、对象中
		var obj = {
			◊ name:'lisi'
			◊ say:function(){ }
		}
		obj.name
		obj.say()
		obj["say"]()
	
	® js解析器优先解析函数声明,然后解析使用var操作符声明的变量,但赋值undefined
	® 函数内部代码,在函数调用时执行
	/*解析:
            function run(){}
            function work(){}
            var say;
            run();
            say = function(){}
        */     
        //console.log(say);   //undefined
        //say();      //say is not a function
        run();        //run-----
        var say = function(){
            console.log("say-----");
        }
        function run(){
            console.log("run-----");
	    }
	    function work(){
	        console.log("work-----");
	    }
		
		var a = 10;
		var a = 20;
		console.log(a);


		function say(a){ }
		function say(a, b){ }
		say(10);
		
		js没有重载概念,只要函数名相同,即为重写
	
□2、函数的调用
	® 函数名()
	® new 函数名()
	
□ 3、函数的参数
	® 形式参数:当前函数需要的参数
	® 实际参数:实际调用方法时传递的参数

	function say(形式参数){}
	var say = function(形式参数){}
	say(实际参数);
	
	形参个数和实参个数可以不一致,并且数据类型不限
	function say(a, b){
		//var a;
		//var b;
		console.log(a, b);
	}
	say(10);
	
□ 4、函数的内部属性
	® arguments:
		◊ 类数组对象:包含实际参数
			} [Arguments]{0:1,1:2}
			function say(a,b){
		            //1.var a;var b;
		            //2.1->arguments[0]
		                //2->arguments[1]
		                //3->arguments[2]
		            //3.argumnets[0]->a
		                //arguments[1]->b
		            console.log(a,b);
		            console.log(arguments);
 }
		        say(1,2,3);
			
			} 用来保存实参对象
		◊ length:实参个数
		◊ callee:从函数内部指向当前拥有arguments的函数
				减少重复计算
				
		◊ this:
			} this指向函数赖以生存的环境对象
			} 函数的this值什么时候确定?
				– 在函数被调用时确定
			} 指向谁?
				– 当前拥有this的函数被谁调用,被谁调用就指向谁


			} 链式作用域
			var length = 10;
		        function say(){
		            //length = 30;
		            alert(this.length);
		        }
		        var obj = {
		            length: 20,
		            say: say,
		            run: function(handler){
		                handler();
		                alert(this.length);
		            }
		        }
		        //say();
		        //obj.say();
		        obj.run(say);   //相当于window调用
□ 5、作为值的函数和作为返回值的函数
	® 值:
		function say(){ }
		var handler = say;
		handler();
		function run(h){
			h();
		}
		run(say);
	® 返回值:
		/*function say(){
	            var a = 10;
	            return a;
	        }
	        var result = say();*/
	        // console.log(result);
	        /*var length = 10;
	        function say(){
	            console.log("say====");
	            return function(){
	                alert(this.length);
	            }
	        }
	
	        var result = say();
	        // result = function(){}
	        result();*/
	
	        function say(){
	            var a = 10;
	            function inner(){
	                var b = 20;
	                console.log(a);
	                console.log(b);
	            }
	            return inner;
	        }
	        var result = say();
	        result();
 
□ 6、函数的属性
	function say(){}
	obj:{
		say: function(){}
	}
	
	对象名.属性名
	length:
		say.length:返回当前函数的形参个数
		
	prototype:原型对象
		用来存储非静态方法/公有属性和方法
		
	call():
		函数的调用方式
		函数名.call(this, 实际参数列表)
		say.call(this, 1, 2, 3, 4)
		
	apply()
		函数的调用方式
		函数名.apply(this,[实参列表])
		say.apply(this, [1, 2, 3, 4])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值