javascript基础-js函数
一、创建函数的方式
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函数的更多相关文章
- Javascript 基础--JS函数(三)
一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2) 基本语法 function 函数名(参数列表){ //代码; retur ...
- JavaScript基础之函数与数组
函数 函数的基本概念 为完成某一功能的程序指令(语句)的集合,称为函数.有的程序员把函数称为方法,希望大家不要被这两个名词搞晕了. 函数分为:自定义函数.系统函数(经常查看js帮助手册). j ...
- (Frontend Newbie)JavaScript基础之函数
函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- JavaScript 基础回顾——函数
在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...
- javascript基础(五)函数
原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...
- javascript基础:函数参数与闭包问题
今天在写东西的时候,对函数参数的概念有些模糊,查阅相关资料后,在博客上记点笔记,方便日后复习. 首先,在js中函数参数并没有强语言中那么要求严格,他不介意传递进来多少个参数,也不在乎传进来的参数是什么 ...
- JavaScript基础 -- js常用内置方法和对象
JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...
- Javascript基础 - js中曾经忽略的知识点
深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...
随机推荐
- C#学习历程(三)[基础概念]
>>简单描述OOP 面向对象编程是由面向过程编程发展而来,不再注重于具体的步骤,而是更多的聚焦于对象. 以对象为载体,然后去完善对象的特点(属性),然后实现对象的具体的功能,同时处理对象与 ...
- wget 认知及常用命令【转载】
https://www.cnblogs.com/lxz88/p/6278268.html https://www.cnblogs.com/cindy-cindy/p/6847502.html
- Spring整合hibernate:3、使用XML进行声明式的事务管理
配置applicationContext.xml文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...
- 修复 海盗船 k70 lux 未检测到设备(k70 no device detected)
corsair k70 lux 上周收到的生日礼物,头一次用机械键盘,还是这么高端的机械键盘(729RMB),手感一级棒.但是,有问题啊!把键盘上的 bios按钮拨到8上电脑可以识别,scroll 灯 ...
- MySQL学习(一): MySQL的初步操作与命令
启动与关闭: 用管理员身份运行cmd 启动:net start mysql57 其中mysql57是我的MySQL名称,版本不同名称可能不一样 关闭:net stop mysql57 与上面同理 登录 ...
- java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方
一道笔试题 22. 下面代码的运行结果为:() import java.io.*; import java.util.*; public class foo{ public static void m ...
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...
- JVM运行时数据区和垃圾回收机制
最近参考各种资料,尤其是<深入理解Java虚拟机 JVM高级特性和最佳实践>,大牛之作.把最近学习的Java虚拟机组成和垃圾回收机制总结一下. 你不会的都是新知识,学无止境,每天进步一点点 ...
- EasyAACEncoder海思/ARM平台优化G711、G726转AAC的CPU占用高问题
本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/75645378 引言 目前EasyDarwin ...
- 《机器学习》第三章——LDA
import numpy as np x=np.zeros((2,17)) y=np.zeros((1,17)) def dataload(filename): f=open(filename) ar ...