函数
封装功能的代码段
- 只定义不调用,没有作用,不会执行
- js中形参和实参的个数可以不匹配
- js中函数是可以相互嵌套的
- js中的作用域只看函数.
- 函数也是对象
函数的声明
-
函数声明:
-
语法
function 函数名(参数列表) { ... }
-
参数:没有var关键字,相当于局部变量的声明,默认值undefined
-
返回值:
- 显示定义return 语句,并且return后面有返回值数据
- 没有定义return 语句,默认值为undefined
-
-
函数表达式:
-
语法:
var 变量名 = function 函数名() { ... };
-
函数表达式的函数名在外部无法使用,但是可以在函数内部使用,实现递归
-
-
Function构造函数
-
语法:
var add = new Function('x', 'y', 'return (x + y)'); // 等同于 function add(x, y) { return(x + y); }
-
函数的调用
- 通过函数声明定义的函数:
- 函数名(实参列表);
- 先转为函数表达式,在其最后添加()进行调用:
- 函数声明前添加~|-|+|-,转为函数表达式
- 函数声明前后添加( ),转为函数表达式
- 通过函数表达式定义的函数:
- 变量名(实参列表);
- 函数表达式的后面之间添加()进行调用
函数名的提升
-
js中的变量,变量的声明会提升到当前作用域的最上方
-
js中的函数,函数会提到当前作用域的最上方
- 函数声明方式定义的函数会提升
- 函数表达式定义的函数不会提升
实参与形参
-
实参可以省略,那么对应形参为undefined
-
若函数形参同名(一般不会这么干),在使用时以最后一个值为准
-
可以给参数默认值:当参数为特殊值时,可以赋予默认值
//如果参数a为0,null,undefined\,''时,给默认值'a'|.... function defaultValue(a) { a = a || "a"; return a; } console.log('参数默认值-----' + defaultValue()); //判断参数为某些指定的值的时候,给默认值 function f(a) { //若参数a不为undefined或null,则取本身的值,否则给一个默认值 (a !== undefined && a !== null) ? a = a: a = 1; return a; }
-
参数为值传递,传递副本;引用传递时传递地址,操作的是同一个对象
// 值传递 var num = 12; function change(n) { //n=12 n = 30; } change(12); console.log('值传递-----' + num); //12 // 引用传递 var obj = { name: "tom" }; function paramter(o) { o.name = '2'; } paramter(obj); console.log('引用传递-----' + obj.name); // 给形参o赋予了新的数组 var obj2 = [1, 2, 3]; //数组是对象 function paramter2(o) { o = [2, 3, 4]; o[0] = 3; } paramter2(obj2); console.log('引用传递-----' + obj2); // [1, 2, 3]
arguments对象
- 函数内部使用,调用函数时实参的对象
函数本身的属性和方法
- 函数名.name 函数名称
- 函数名.length 形参的个数
- 函数名.toString() 返回函数的源码
全局变量和局部变量
- 在一个函数中,如果没有使用var关键字定义的变量,是一个全局变量
- 函数内部的全局变量,必须要先调用函数,才能全局使用
this
-
js中的this关键字,在运行期为this绑定对象
-
使用决策树的方式判定this指代的对象
-
this是否是new使用的,如果是,this指代 new 的那个对象
-
通过 对象. 触发调用的,如果是,this指代 . 前面的那个对象
-
this默认指代window对象,成员变量和成员属性都是window对象的属性或者方法
function User(name, pwd) { this.name = name; this.pwd = pwd; } var u = new User("root", 123456); console.log(u); // User {name: "root", pwd: 123456} var a = 5; console.log(a); // 5 console.log(this.a); // 5 console.log(window.a); // 5 var obj = { a: 10, fn: function (b, c) { console.log(this.a, b, c) } }; obj.fn(1, 2); // 10 1 2 var f = obj.fn; f(11, 22); // 5 11 22
-
-
改变this指向
-
call()
-
apply()
var obj2 = {a: 20}; obj.fn.call(obj2, "asd", 123); // 20 "asd" 123 obj.fn.apply(obj2, [{a: 50}, "qwe"]); // 20 {a: 50} "qwe"
-
闭包
-
实现闭包的要求:
- 函数嵌套函数
- 外函数返回内函数
- 内函数中使用到外函数的环境
-
内函数中使用的外函数的内容,不会释放内存,可以在外部重读使用这个环境中的局部变量
function outer() { var a = 10; function inner() { console.log(a--); } return inner; } var out = outer(); out(); // 10 out(); // 9 out(); // 8 out(); // 7
JavaScript内置对象
-
String 字符串对象
- charAt(idx):返回指定位置处的字符
- indexOf(Chr):返回指定子字符串的位置,从左到右。找不到返回-1
- substr(m,n):返回给定字符串中从 m 位置开始,取 n 个字符,如果参数 n 省略,则意味着取到字符串末尾。
- substring(m,n):返回给定字符串中从 m 位置开始,到 n 位置结束,如果参数 n省略,则意味着取到字符串末尾。
- toLowerCase():将字符串中的字符全部转化成小写。
- toUpperCase():将字符串中的字符全部转化成大写。
- replace(s1, s2):替换,将s1替换为s2。
- length: 属性,不是方法,返回字符串的长度。
-
Math 数学对象
- Math.random():生成随机数
- Math.ceil():向上取整
- Math.floor():向下取整
- Math.round():四舍五入取整
-
Date 日期
-
获取日期对象中的指定时间
- getFullYear()年,getMonth()月,getDate()日,getDay()周,getHours()时,getMinutes()分,getSeconds()秒
-
设置日期对象中的指定时间
- setYear(),setMonth(),…
- toLoacaleString()
- 注意:月份是从0开始的
-
JS中并没有直接提供可以格式化日期时间的方法,需要我们自己去实现:
function date_Simply_Formate(time, format='yyyy-MM-dd hh:mm:ss') { var newFormat; newFormat = format.replace('yyyy', time.getFullYear()) .replace('MM', time.getMonth() + 1) .replace('dd', time.getDate()) .replace('hh', time.getHours()) .replace('mm', time.getMinutes()) .replace('ss', time.getSeconds()); return newFormat; } console.log(date_Simply_Formate(new Date(),'yyyy年MM月dd日'));
-
对象
- js中一切皆对象
- 创建对象的方式
- new Object()
- Ojbect.create(null)
- {}
- 操作对象的方式
- 对象名.key
- 对象名[‘key’] (万能)
- 对象中的数据是以键值对key:value形式存在
- 每一个键值对之间使用,分隔
- key与value之间使用:分隔
- key满足标识符的命名规范|规则,不满足标识符的命名要求,必须定义在一对引号中
- 默认对象中的key就是字符串类型
- value可以是任意类型的数据
- js中的符合特殊格式json的对象
- 序列化
- 序列化对象,将对象转为字符串
- JSON.stringify(object);
- 反序列化
- 反序列化,将一个Json字符串转换为对象
- JSON.parse(jsonStr);
- 参数:字符串形式的js对象,key都是字符串形式,前后添加""
- eval()
- 实现字符串转对象的效果