一.函数与形参

1.函数

function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
alert(abs(-10));

2.匿名函数

var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
alert(abs(-10));

3.argument传入参数

  • 普通函数写法
function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
} abs(); //
abs(10); //
abs(-9); //
  • 匿名函数写法
var abs = function () {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
} alert(abs(-10)); //

4.任意参数(类似python的def foo(a,*b,**c): pass)

function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
} foo(1, 2, 3, 4, 5);
// 结果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ] foo(1);
// 结果:
// a = 1
// b = undefined
// Array []

二.变量作用域

1.所有的变量都会绑定到window中;

2.JavaScript的函数会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部;

3.let/const可替代var申明一个块级作用域的变量(局部变量)

三.方法

1.在一个方法内部,this是一个特殊变量,它始终指向当前对象(只作用一层,如果函数内部再定义一层函数,那么里面这个函数的this会指向undefined,补救方法就是引入 var that = this;)

function getAge() {
var y = new Date().getFullYear();
return y - this.birth;
} var xiaoming = {
name: '小明',
birth: 1990,
age: getAge //此处为函数,不为函数的调用
}; xiaoming.age(); // 25, 正常结果 //错误写法
var fn = xiaoming.age; // 反例,先拿到xiaoming的age函数
fn(); // NaN
  • 有点疑惑的是:
//正确写法
var xiaoming = {
name: '小明',
birth: 1990,
age: function () {
var that = this;
function getAgeFromBirth() {
var y = new Date().getFullYear();
return y - that.birth;
}
return getAgeFromBirth();
}
}; alert(xiaoming.age()); //错误写法 var that;
function getAgeFromBirth() {
var y = new Date().getFullYear();
return y - that.birth;
} var xiaoming = {
name: '小明',
birth: 1990,
age: function () {
var that = this;
return getAgeFromBirth();
}
}; alert(xiaoming.age());

2.js的闭包跟python的不同,python是返回函数,js是返回函数的调用!

3.一般的语言中,都是对象调用方法,但js有个比较有趣的点就是可以反过来用apply实现方法指定对象的目的(这个特性可以修复1中的this->undefined的缺陷)

function getAge() {
var y = new Date().getFullYear();
return y - this.birth;
} var xiaoming = {
name: '小明',
birth: 1990,
age: function (){
return getAge();
}
}; alert(getAge.apply(xiaoming,[])); //25,正确
alert(xiaoming.age()); //NaN错误

4.apply实现装饰器

5.高阶函数

function abs(z){
if(z<0) return -z;
else return z;
}
function add(x,y,f){
return f(x) + f(y);
}
alert(add(-3,5,abs));

6. Map/reduce/filter

var arr = [1, 3, 5, 7, 9];
var fun = function (x, y) {
return x + y;
}
var filt = function (s){
return s % 3 === 0;
}
alert(arr.reduce(fun)); //reduce 25
alert(arr.map(fun)); //map
alert(arr.filter(filt)); //filter 3,9

7.扩展sort排序(高阶函数)

var arr = [10, 20, 1, 2];
var after_sort = arr.sort(function (x,y){
if (x>y){
return 1;
}
if (x<y){
return -1;
}
return 0;
}) alert(typeof(after_sort)); //object
alert(after_sort); //[1,2,10,20]

8.闭包

9.箭头函数

var fn = x => x * x;

等价于

var fn = function  (x) {
return x*x;
}

10.迭代器

Javascript备忘复习笔记2的更多相关文章

  1. Javascript备忘复习笔记1

    一.字符串操作 1.大小写 var s = "hello"; undefined g = s.toUpperCase(); "HELLO" g; "H ...

  2. Javascript备忘模式

    使用备忘模式,利用了函数的自定义属性,先看一个例子 var test = function (){} test.myAttr = "attr"; 这样,就给test加上了一个自定义 ...

  3. Javascript备忘

    js输出对象类型: Object.prototype.toString.apply(s) 设置单行点击效果: obj.style.background = "#efefef";se ...

  4. Javascript 备忘

    1遍历所有属性 var person={fname:"John",lname:"Doe",age:25}; for (x in person) { txt=tx ...

  5. javascript 备忘 细节 相关

    DOMContentLoaded事件触发时机,即dom tree完成但页面未必渲染完毕.   var a = [1,2,3,4]; var length = a.length; alert((leng ...

  6. JavaScript对象(复习笔记)

    js对象 对象构造器 function person(firstname,lastname,age,eyecolor){ this.firstname=firstname; this.lastname ...

  7. JavaScript基础教程复习笔记

    document.write("<h1>这是一个标题</h1>"); 您只能在 HTML 输出中使用 document.write.如果您在文档加载后使用该 ...

  8. git备忘 & ProGit笔记

    git configgit config  xxxxx   xxxx可以是 --global(使用的是~/.gitconfig)  --system(据说在linux下面使用的是/etc/gitcon ...

  9. [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象

    <script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...

随机推荐

  1. JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)

    import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; ...

  2. MAVEN中的插件放在哪个dependcies里面

    如果你用maven来管理项目的话,你会发现你要依赖很多plugin,于是引出了一个问题. 一个project中可能有两个<dependcies>这个tag, 如下 <dependci ...

  3. cocoapods pod setup

    在终端  输入 pod setup  之后 你会发现 一直没有反应    会出现这种情况   如下图   你要耐心等一下. 直到看到Setup completed    就算是成功了.(你的网络要好) ...

  4. 【代码笔记】iOS-将400电话中间加上-线

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  5. mysql中数据类型的取值范围

    mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...

  6. (转) 一步一步学习ASP.NET 5 (一)- 基本概念和环境配置

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 编者语:时代在变,在csdn开博一年就发了那么的两篇文章,无论是什么原因都觉得有愧了.但是今年重心都会在这里发表一些文章,和大家谈谈.NET, 移 ...

  7. VS2013崩溃,无法打开项目的解决方案

    最近遇到VS2013,在打开解决方案时,报如下错误: “未找到与约束 ContractName Microsoft.Internal.VisualStudio.PlatformUI.ISolution ...

  8. MS SQL Server2014链接MS SQL Server 2000

    开发与企业应用中,好几个版本SQL Server相互链接.分布式读取与存储,需要实现sp_addlinkedserver.SQL Server 2000, SQL Server 2008, SQL S ...

  9. RTP、RTCP协议学习-2015.04.15

    最近做视频编解码部分,传输采用RTP协议.对学习做个记录 1.简介 实时传输协议(Real-time Transport Protocol或简写RTP)是一个网络传输协议,它是由IETF的多媒体传输工 ...

  10. iOS 懒加载不起作用的原因

    在.m类中定义了一共strong属性,用懒加载getter方式去处理,发现用的时候无论如何属性都是null,调试后,发现根本没进getter方法. (ps:懒加载,又称为延迟加载.说的通俗一点,就是在 ...