Javascript备忘复习笔记2
一.函数与形参
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的更多相关文章
- Javascript备忘复习笔记1
一.字符串操作 1.大小写 var s = "hello"; undefined g = s.toUpperCase(); "HELLO" g; "H ...
- Javascript备忘模式
使用备忘模式,利用了函数的自定义属性,先看一个例子 var test = function (){} test.myAttr = "attr"; 这样,就给test加上了一个自定义 ...
- Javascript备忘
js输出对象类型: Object.prototype.toString.apply(s) 设置单行点击效果: obj.style.background = "#efefef";se ...
- Javascript 备忘
1遍历所有属性 var person={fname:"John",lname:"Doe",age:25}; for (x in person) { txt=tx ...
- javascript 备忘 细节 相关
DOMContentLoaded事件触发时机,即dom tree完成但页面未必渲染完毕. var a = [1,2,3,4]; var length = a.length; alert((leng ...
- JavaScript对象(复习笔记)
js对象 对象构造器 function person(firstname,lastname,age,eyecolor){ this.firstname=firstname; this.lastname ...
- JavaScript基础教程复习笔记
document.write("<h1>这是一个标题</h1>"); 您只能在 HTML 输出中使用 document.write.如果您在文档加载后使用该 ...
- git备忘 & ProGit笔记
git configgit config xxxxx xxxx可以是 --global(使用的是~/.gitconfig) --system(据说在linux下面使用的是/etc/gitcon ...
- [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象
<script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...
随机推荐
- UIColor与PatternImage
UIColor有一个方法叫做+ (UIColor *)colorWithPatternImage:(UIImage *)image;. 返回的是一个UIColor,但没有明确的RGB值,所以叫做pat ...
- GpsLocationProvider中的sendExtraCommand方法
Android系统源码中GpsLocationProvider类中包含sendExtraCommand方法,代码如下 @Override public boolean sendExtraCommand ...
- 1.4 基础知识——GP2.2 计划 与 GP2.8 计划跟踪
摘要: CMMI有计划(PP)及计划跟踪(PMC)两个PA,而某一个PA又有GP2.2计划及GP2.8计划跟踪两个GP,看上去是挺“神奇”也挺让人“困惑”的事情. 正文: GP2.2 Establis ...
- php示例代码之使用list函数和mysql_fetch_row函数
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 28 29 30 31 32 33 34 35 36 3 ...
- python 读写文件
#! -*- encoding:utf-8 -*- import os from config import * from function import GetCsspToken, RegistIn ...
- 带进度条的 jQuery 文件拖放上传插件
jQuery File Uploader :jQuery File Uploader 是一个 jQuery 文件拖放上传插件 兼容性判断 下载:https://github.com/danielm/u ...
- Sql Server 添加外部程序集基本操作
简介:有时候Sql Server的内置函数没有那么好用的时候,可以引用一下外部程序集,下面献下丑,做下添加外部程序集操作 1.准备程序,编译出一个MyCLR的DLL. public class CLR ...
- MySQL入门(四)
我好久没有写这个系列了,也确实不知道写什么.回首我学习数据库的路,最开始搞Oracle的时候其实没有搞懂Oracle,也不知道学了什么,后来学习MySQL尤其是InnoDB才大概入了门了.我最开始学习 ...
- 神奇的expect
想写自动化脚本的时候,遇到需要交互的,如ssh,scp,就束手无策,直到我知道了expect. expect 有一系列expect-send对组成,就像聊天一样. expect A send B ex ...
- (转)Java 详解 JVM 工作原理和流程
作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚 ...