javascript基础-js函数

it2022-05-05  166

一、创建函数的方式

 

1)普通方式

function cal( num1, num2 ) { return num1+num2; }

 

2)使用变量初始化方式

var plus = function(num1, num2) { console.log(num1 + num2); } // 调用 plus(15,20);

 

3)使用构造函数

//这种方式不推荐使用,这种语法会导致解析两次代码 var box = new Function("num1", "num2", "return num1+num2"); console.log(box(1,3)); console.log(typeof box); //输出:function 表示function类型的字符串

 

4)作为函数的返回值传递

function fun(num){ return num+10; } function fun1(fun, num){ return fun + num; } var result = fun1(fun(10), 10); //fun2(10)这里传递的是函数的返回值,和普通的变量一样 console.log(result);

 

5)将函数本身进行传递

function fun2(fun, num){ return fun(num); } var result = fun2(fun, 10); console.log(result)//打印result变量,即函数 console.log(result( ))//调用函数并打印return的结果

 

 

 

二、匿名函数

 

1)普通函数

function box( ) { console.log("1"); }

 

2)匿名函数

单独的匿名函数是不能运行的,就算能运行,也无法调用

function( ) { return "Lee"; }

 

3)把匿名函数赋值给变量

var box = function( ) { return "box:匿名函数"; }

 

4)自调用匿名函数

(function(){ console.log("1"); })( );

(function( ) { console.log("2"); }( ));

 

5)自调用匿名函数赋值给变量

//如果没有后面的(),将打印出函数 var test = (function( ) { return "test:匿名函数"; }) ( ); console.log(test); console.log((function( ) {return "自我执行后用的打印"})( ));

 

6)匿名函数的传参

 

(function(age){ console.log(age); //25 })(25);

 

7)函数里的匿名函数

function box2( ) { return function( ) { //(闭包-函数里面的函数) return "函数里的匿名函数"; } } console.log(box2( )( ));

var b=box2( ); console.log(b( ));

 

 

 

三、闭包

概念:闭包就是能够读取其他函数内部变量的函数用途:1.可以读取函数内部的变量;2.让这些变量的值始终保持在内存中优点:可以把局部变量驻留在内存中,避免使用全局变量(使用全局变量的缺点:污染较大)缺点:由于闭包里作用域返回的局部变量资源不会被立即销毁回收,所以可能会占用更多的内存。过度使用闭包会导致性能下降。在IE中可能导致内存泄露。解决方法 是,在退出函数之前,将不使用的局部变量全部删除。

 

1)通过闭包返回局部变量

function box( ) {; var age = 32; return function( ) { return age; }; } console.log(box( )( ));

 

例1:使用全局变量来进行累加

var num = 100; function test(){ num++; } console.log(num); //执行第一次:101 test(); console.log(num); //执行第二次,102

 

例2:使用局部变量进行累加(只能执行一次)

function test2(){ var i = 100; i++; return i; } console.log(test2()); //执行第一次,101 console.log(test2()); //执行第二次,101

 

2)使用匿名函数实现局部变量驻留内存中,从而累加

 

function test3(){ var a=100; return function(){ a++; return a; }; } //错误调用方法: console.log(test3( )( )); //执行第一次,101 console.log(test3( )( )); //执行第二次,101 //正确调用方法: var t = test3(); console.log(t( )); //执行第一次,101 console.log(t( )); //执行第二次,102 t = null; //解除引用,等待垃圾回收(销毁) console.log(t()); //将抛出异常

 

闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便

 

转载于:https://www.cnblogs.com/caoxb/p/9534887.html


最新回复(0)