javascript-函数进阶
一、函数定义
1、函数声明
function add(i,j){
return i+j;
}
特点:1、函数声明定义函数会被前置。要知道在js代码执行时,会有一个预解析,预解析时会把变量声明、函数声明提前。2、函数声明重复定义时会以最后一次定义来执行,即后面会覆盖前面的函数声明。
2、函数表达式
var add = function(i,j){
return i+j;
}
3、函数实例化
var add = new Function("i","j","return (i+j)");
很少使用,不推荐
特点:1、函数实例化定义函数只能访问本地作用域和全局作用域
二、函数调用及区别
1、函数调用模式:add();
2、方法调用模式: object.add();
3、构造函数调用模式: new Function(...);
4、apply(call)调用模式:apply(call)是构造函数原型上的方法.其实现的就是函数借用的功能
例子:
function Point(x,y){
this.x = x;
this.y = y;
}
//定义一个point构造函数
point.prototype.move(x.y){
this.x + = x;
this.y + = y;
}
var p = new Point(0,0);
//实例化一个p点
p.move(2,2);
var circle = (x:1, y:1, r:1);
//定义一个全局circle对象,但是circle没有move方法,所以可以用apply或者call来借用p有的move方法。
p.move.apply(circle, [2,1]);
5、各种函数调用模式的区别-this
js执行时,js引擎会在函数的本地作用域上添加this、arguments这两个临时变量。不同调用模式的区别就表现在this的指向上。
- 函数调用模式下,this指向为全局对象window
- 方法调用模式下,this指向为调用者
- 构造函数模式下,this指向被构造的对象,如果构造了多个对象,this就指向这些被构造的对象
- apply(call)调用模式下,this指向第一个参数
思考题:
var myNumber = {
value: 1,
add: function(i){
var helper = function(i){
console.log(this);
this.value +=1;
}
helper(i);
}
}
myNumber.add(1);
//1、helper函数中的this指向哪个对象,2、这段代码能否实现正确逻辑 3、可以怎么修改来实现正确逻辑
三、函数传参
1、按值传递:原始类型
2、按共享传递:对象类型

var count = {a:1,b:1};
var addOne = function(obj){
obj.a +=1;
obj.b +=1;
return obj;
}
var ret = addOne(count);
console.log(ret);
console.log(count);
//Object {a: 2, b: 2} Object {a: 2, b: 2}
但是现在还不能判定时按引用传递,因为如果是引用传递在函数内部对外部变量引用的修改,任何改变都会发生在外部变量上,实践结果如下:
var count = {a:1,b:1};
var addOne = function(obj){
obj = {a:2,b:2};
return obj;
}
var ret = addOne(count);
console.log(ret);
console.log(count);
Object {a: 2, b: 2}
Object {a: 1, b: 1}
javascript-函数进阶的更多相关文章
- 深入理解javascript函数进阶系列第一篇——高阶函数
前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...
- 深入理解javascript函数进阶系列第二篇——函数柯里化
前面的话 函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家Haskell Curry将其丰富和发展,currying由此得名.本文将详细 ...
- 深入理解javascript函数进阶系列第三篇——函数节流和函数防抖
前面的话 javascript中的函数大多数情况下都是由用户主动调用触发的,除非是函数本身的实现不合理,否则一般不会遇到跟性能相关的问题.但在一些少数情况下,函数的触发不是由用户直接控制的.在这些场景 ...
- 深入理解javascript函数进阶系列第四篇——惰性函数
前面的话 惰性函数表示函数执行的分支只会在函数第一次调用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了.本文将详细介绍惰性 ...
- JavaScript的函数进阶
函数进阶 1立即执行函数表达式 立即执行的函数表达式的英文全称为Immediately Invoked Function Expression,简称就为IIFE.这是一个如它名字所示的那样,在定义后就 ...
- 【转】Python之函数进阶
[转]Python之函数进阶 本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函 ...
- 零基础讲解JavaScript函数
一 JavaScript函数1 什么是函数 函数是一组代码(指令)的集合,通常用来完成某个单一的功能.(书的目录和章节,电视剧剧集的名称等)2 为什么要使用函数 2.1 把复杂程序划分成不同的功能 ...
- JavaScript函数体系
第4章 JavaScript函数 1. 函数基本介绍 ① 为什么需要函数 函数最大的好处就是将零散的代码封装到了一起,当我们要再次使用该功能的时候,不需要再重新书写代码,只需要调用封装好的函数就可以 ...
- javascript入门进阶(一)
javascript 入门进阶 这里主要讲解一下在入门阶段很难注意的一些知识点,不一定有用.但是会了总比不会强. 1.HTML为<script>标签准备的6个属性: -async:可选.表 ...
- ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...
随机推荐
- thymeleaf学习
一.简单表达格式: thymeleaf的官方参考文档 1.变量的表达式:${...} 2.选择变量表达式:*{...} 3.信息表达:#{...} 4.链接URL表达式:@{...} 二.字面值 ...
- substr函数
substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H' *从字符串第一个字符开始截取长度为1的字符串 subst ...
- PictureEdit中拖放图片
public partial class Form2 : Form { string fileName = string.Empty; public Form2() { InitializeCompo ...
- C++的辅助工具介绍
1 文档类 (1) Doxygen 参考站点:http://www.doxygen.org Doxygen是一种适合C风格语言(如C++.C.IDL.Java甚至包括C#和PHP)的.开放源码的 ...
- Jstl标签的使用
一. 配置 JSTL 包括两个 JAR 文件, jstl.jar 和 standard.jar .是什么没有必要管,重在应用( 1+1 ? =2 ,我们没有必要深究,只需要知道这么用就行.). 原文引 ...
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
当Adobe.Microsoft.Sun等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来! 最初来自:sinoprise.com/read.php?tid-662-page-e-fpa ...
- cmp排序hdoj 1106排序
上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下cmp排序 /*标题还是比拟的水吧,但是花的时间还是比拟的多,心不够静*/ #include <iostrea ...
- codeforces Gym 100500H A. Potion of Immortality 简单DP
Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...
- epoll使用具体解释(精髓)
epoll - I/O event notification facility 在linux的网络编程中,非常长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就 ...
- Linux rsync 同步实践
目录[-] 1. rsync 同步的大致思路 2. rsync的安装 3. rsync的配置 4. rsync的基本操作 服务器端启动 注2. 实时同步 注3. rsync通过linux防火墙 公司网 ...