一、创建函数的方式

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. 由浅入深了解EventBus:(五)

    事件分发 EventBus3.0的事件的分发时通过EventBus类中的post(粘性事件为postSticky)方法,post与postSticky的唯一区别就是,在postSticky内部首先会向 ...

  2. form表单序列化之后追加字段

    方法是在{}中添加字段 key-value 一一对应,如下: var data = $.param({'state': state}) + '&' + $('#desProForm').ser ...

  3. .net的.aspx页面调试方法

    做.net网站开发,有时候需要调试和察看变量, 1.设置好断点以后, 2.设置调试:VS 菜单: 调试————〉附加到进程————〉在 “可用进程” 列表中选择 标题为 "ASP.NET D ...

  4. Dom4j下载及使用Dom4j读写XML简介(转)

    Dom4j下载及使用Dom4j读写XML简介 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:ht ...

  5. 敏捷BI与数据驱动机制

    大数据这件事,整体上还是说的多一些,做的稍微少一点.大数据可以是荒凉高原上波澜壮阔的机房,也可以润物细无声般融入到日常生活和工作.换句话说,大数据应该是一种文化. 在个人层面,很多人对数字和计算并不敏 ...

  6. Photon——Feature Overview 功能概述

    Photon——Feature Overview 功能概述   Feature Overview 功能概述        Photon is a real-time socket server and ...

  7. python中封装

    封装 引子 从封装的本身意思去理解,封装就是用一个袋子,把买的水果.书.水杯一起装进袋子里,然后再把袋子的口给封上,照这样的理解来说,封装=隐藏,但是,这种理解是片面的 ## 如何封装 在python ...

  8. 将自己的框架更新到cocopods上

    为了更方便的集成第三方框架有了cocopods 的, 当我们有了相对比较好的框架的时候如何更新到cocopods 供他人参考呢? 下面我一步一步带大家开源自己的框架. 第一步 把自己的框架更新到git ...

  9. double类型与Double包装类型

    先看下面的代码 package test; public class DoubleTest { public static void main(String[] args) { Double oD = ...

  10. 利用ajax完成项目图册上传删除【实际项目】

    [项目页面效果] [前台jsp页面] jsp的js代码 <script type="text/javascript"> //上传项目图片 function upload ...