一、创建函数的方式

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);

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),这时一定要小心,不要随便

javascript基础-js函数的更多相关文章

  1. Javascript 基础--JS函数(三)

    一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2)   基本语法 function 函数名(参数列表){ //代码; retur ...

  2. JavaScript基础之函数与数组

     函数    函数的基本概念 为完成某一功能的程序指令(语句)的集合,称为函数.有的程序员把函数称为方法,希望大家不要被这两个名词搞晕了. 函数分为:自定义函数.系统函数(经常查看js帮助手册). j ...

  3. (Frontend Newbie)JavaScript基础之函数

    函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...

  4. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  5. JavaScript 基础回顾——函数

    在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...

  6. javascript基础(五)函数

    原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...

  7. javascript基础:函数参数与闭包问题

    今天在写东西的时候,对函数参数的概念有些模糊,查阅相关资料后,在博客上记点笔记,方便日后复习. 首先,在js中函数参数并没有强语言中那么要求严格,他不介意传递进来多少个参数,也不在乎传进来的参数是什么 ...

  8. JavaScript基础 -- js常用内置方法和对象

    JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...

  9. Javascript基础 - js中曾经忽略的知识点

    深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...

随机推荐

  1. Spring入门5.事务管理机制

    Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...

  2. TPCC-MySQL(转自imysql.com)

    [Tpcc-mysql] Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试,其源码放在bazaar(Bazaar是一个分布式的版本控制系统,采用 GPL 许可协 ...

  3. ElementUI组件Cascader级联选择器数据后台处理

    Cascader级联选择器数据数据格式不知道的可以去官网看下:这里我就不表示什么了. 部门实体类: import lombok.Data; @Data public class Department ...

  4. Systems

    package com.System; public class Study01 { /* * System 包含一些游泳的类字段和方法 * 继承自java.lang包 * JDK1.0开始 * 全部 ...

  5. 分水岭分割算法(watershed segmentation)的C++实现(法1)

    运行环境:ubuntu16.04+Qt+opencv2.4.13 参考链接:http://blog.csdn.net/u010741471/article/details/45193521 water ...

  6. Kotlin Reference (一) Basic Syntax

    什么是Kotlin Kotlin翻译成中文叫"靠他灵",它是由JetBrains公司发明的一种基于JVM的编程语言,目前Google宣布kotlin为Android开发的官方语言. ...

  7. Kotlin都转正成Android官方语言了,你还不试一下?

    想想Android Studio 和Eclipse ,我觉得你还是有必要入手Kotlin了. 站好队很重要. 以前的一篇总体概括老文,大家可以看看~ 爽翻天!告别Java.一起来使用kotlin开发完 ...

  8. UCB算法

    前言: 来万物花开这家创业公司实习,也真是一波三折.先实习了三天,每天下午到公司工作到晚上.工作时间是每天下午到晚上9.30.结果每天上午没法用心干实验室的活了,下午在公司工作的时候,总是提心吊胆,手 ...

  9. QUnit使用

    什么是单元测试 每个单元测试就是一段用于测试一个模块或接口是否能达到预期结果的代码. QUnitjs 概念Qunit是一款强大的用于帮助调试代码的,JavaScript单元测试框架.是jQuery的官 ...

  10. 关于python的包

    参考文献:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html 注:本文大多对上连接的整理,仅用于学习,望博主见谅.转载请附上上述链接. 为什么要包 ...