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’) == ...
随机推荐
- 由浅入深了解EventBus:(五)
事件分发 EventBus3.0的事件的分发时通过EventBus类中的post(粘性事件为postSticky)方法,post与postSticky的唯一区别就是,在postSticky内部首先会向 ...
- form表单序列化之后追加字段
方法是在{}中添加字段 key-value 一一对应,如下: var data = $.param({'state': state}) + '&' + $('#desProForm').ser ...
- .net的.aspx页面调试方法
做.net网站开发,有时候需要调试和察看变量, 1.设置好断点以后, 2.设置调试:VS 菜单: 调试————〉附加到进程————〉在 “可用进程” 列表中选择 标题为 "ASP.NET D ...
- Dom4j下载及使用Dom4j读写XML简介(转)
Dom4j下载及使用Dom4j读写XML简介 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:ht ...
- 敏捷BI与数据驱动机制
大数据这件事,整体上还是说的多一些,做的稍微少一点.大数据可以是荒凉高原上波澜壮阔的机房,也可以润物细无声般融入到日常生活和工作.换句话说,大数据应该是一种文化. 在个人层面,很多人对数字和计算并不敏 ...
- Photon——Feature Overview 功能概述
Photon——Feature Overview 功能概述 Feature Overview 功能概述 Photon is a real-time socket server and ...
- python中封装
封装 引子 从封装的本身意思去理解,封装就是用一个袋子,把买的水果.书.水杯一起装进袋子里,然后再把袋子的口给封上,照这样的理解来说,封装=隐藏,但是,这种理解是片面的 ## 如何封装 在python ...
- 将自己的框架更新到cocopods上
为了更方便的集成第三方框架有了cocopods 的, 当我们有了相对比较好的框架的时候如何更新到cocopods 供他人参考呢? 下面我一步一步带大家开源自己的框架. 第一步 把自己的框架更新到git ...
- double类型与Double包装类型
先看下面的代码 package test; public class DoubleTest { public static void main(String[] args) { Double oD = ...
- 利用ajax完成项目图册上传删除【实际项目】
[项目页面效果] [前台jsp页面] jsp的js代码 <script type="text/javascript"> //上传项目图片 function upload ...