若是你想成为一名优秀的java架构师,看这里 → 乐字节免费公开课(腾讯课堂)javascript
如须要跟多资料请点击右侧(记住入群暗号:66) → 这是一条不归路,有秃头风险,请慎重选择!java
函数,即方法。就是一段预先设置的功能代码块,能够反复调用,根据输入参数的不一样,返回不一样的值。<font color="red">函数也是对象。</font>json
有三种函数定义的方式:函数声明语句、函数定义表达式、Function构造函数数组
function 函数名([参数列表]){ } 例如: function foo(){ console.log(1); } foo();
该种方式定义的函数具备声明提高的效果架构
foo(); function foo(){ console.log(1); } // 变量声明提高 console.log( a ); var a = 2;
以表达式方式定义的函数,函数的名称是能够不须要的dom
var 变量名 = function ([参数列表]) { } 变量名(); 例如: var fun = function(){ console.log("Hello"); } fun();
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式,由于赋值语句的等号右侧只能放表达式。ide
Function构造函数接收任意数量的参数,但最后一个参数始终都被当作是函数体,而前面的参数则列举出了新函数的参数。函数
var add = new Function('x','y','return (x + y)'); // 等同于 function add(x, y) { return (x + y); } add();
<font color="red">注意:</font>this
函数运行的时候,有时须要提供外部数据,不一样的外部数据会获得不一样的结果,这种外部数据就叫参数,定义时的参数称为形参,调用时的参数称为实参code
// 调用函数时,实参能够省略,则对应形参为undefined function add(a , b) { console.log(a + "+" + b + "=" + (a + b)); } add(3,4,5)//3+4=7 add(1);//1+undefined=NaN add();//undefined+undefined=NaN // 若函数形参同名(通常不会这么干):在使用时以最后一个值为准 function add2(a , a) { console.log(a); } add2(1,2); // 给参数默认值 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; } console.log(f()); // 值传递 var num = 12; function change(n) { n = 30; } change(num); console.log(num); // 引用传递 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[1] = 3; } paramter2 (obj2); console.log(obj2)
1. 经常使用调用方式
函数名([实参]);
存在返回值能够变量接收,若接收无返回值函数则为undefined。
2. 函数调用模式
function add(a,b){ return a+b; } var sum = add(1,2) console.log(sum);
3. 方法调用模式
var o = { m: function(){ console.log(1); } }; o.m();
函数的执行可能会有返回值,须要使用return语句将结果返回。return 语句不是必需的,若是没有的话,该函数就不返回任何值,或者说返回 undefined。
做用:
1. 在没有返回值的方法中,用来结束方法。
2. 有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。
函数做用域:全局 (global variable) 和 局部 (local variable)
1. 全局变量与局部变量同名问题
var box =1; // 全局变量 function display(box){ var box = 3; // 此处box与全局变量box没有关系,这里的box为传递的参数,至关于新声明的局部变量 var b = 2; // 局部变量 console.log("box-->" + box); } display(); // b 不能访问 console.log("b-->" + b);
2. 在函数中定义变量时,若没有加var关键字,使用以后自动变为全局变量
function fun(){ a = 100; } fun(); alert(a);
Arguments 只在函数内部定义,保存了函数的实参 Array 数组对象 Date 日期对象,用来建立和获取日期 Math 数学对象 String 字符串对象,提供对字符串的一系列操做
◦ charAt(idx) 返回指定位置处的字符 ◦ indexOf(Chr) 返回指定子字符串的位置,从左到右。找不到返回-1 ◦ substr(m,n) 返回给定字符串中从m位置开始,取n个字符,若是参数n省略,则意味着取到字符串末尾。 ◦ substring(m,n) 返回给定字符串中从m位置开始,到n位置结束,若是参数n省略,则意味着取到字符串末尾。 ◦ toLowerCase() 将字符串中的字符所有转化成小写。 ◦ toUpperCase() 将字符串中的字符所有转化成大写。 ◦ length 属性,不是方法,返回字符串的长度。
◦ Math.random() 随机数 ◦ Math.ceil() 向上取整,大于最大整数 ◦ Math.floor() 向小取整,小于最小整数String
// 获取日期 ◦ getFullYear() 年 ◦ getMonth() 月 ◦ getDate() 日 ◦ getHours() 时 ◦ getMinutes() 分 ◦ getSeconds() 秒 // 设置日期 ◦ setYear() ◦ setMonth() ◦ setDate() ◦ setHours() ◦ setMinutes() ◦ setSeconds() ◦ toLoacaleString() 转换成本地时间字符串
<font color="red">说明:</font>
对象(object)是 JavaScript 的核心概念,也是最重要的数据类型。JavaScript 的全部数据均可以被视为对象。JavaScript 提供多个内建对象,好比 String、Date、Array 等等。对象是带有属性和方法的特殊数据类型。
简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成。经过JavaScript咱们能够建立本身的对象。 JavaScript对象知足的这种”键值对”的格式咱们称为JSON格式,之后会见得很是多,即伟大的JSON对象。
{键:值, 键2:值2,...}
JS 建立自定义对象,主要经过三种方式:字面量形式建立对象、经过new Object对象建立 、经过Object对象的create方法建立对象。
var 对象名 = {};//建立一个空的对象 var 对象名 = {键:值,键2:值2,...} var obj = { 'name' : 'hello', age : 12, sayHello : function () { console.log("我是对象中的方法"); }, courses : { javase : 4, javascript : 3 }, isLike : true, members : [ {name : "小红",age : 20}, {name : "小绿",age : 22}, {name : "小蓝",age : 27}, {name : "小黄"} ] };
var 对象名 = new Object(); // 建立一个空的对象 var obj = new Object(); obj.name = 'zs'; obj.age = 18; console.log(obj);
var 对象名 = Object.create(null); var obj = Object.create(null); obj.name = 'ls'; obj.gender = true console.log(obj); var objn = Object.create(obj); objn.age = 18; console.log(objn); console.log(objn.gender)
序列化即将JS对象序列化为字符串,反序列化即将字符串反序列化为JS对象。JS中经过调用JSON方法,能够将对象序列化成字符串,也能够将字符串反序列化成对象 。
// 序列化对象,将对象转为字符串 JSON.stringify(object);
// 反序列化,将一个Json字符串转换为对象。 JSON.parse(jsonStr);
this是JavaScript语言的一个关键字。
它表明函数运行时,自动生成的一个内部对象,只能在函数内部使用。
随着函数使用场合的不一样,this的值会发生变化。可是有一个总的原则,那就是this指的是,调用函数的那个对象。
在函数中使用this属于全局性调用,表明全局对象,经过window对象来访问。
function test () { this.x = 1; console.log(this.x); } test(); console.log(x); // 至关于定义在全局对象上的属性 var x = 10; console.log(x) // 10 function test (){ console.log(this.x) // 10 this.x = 1; console.log(this.x) // 1 console.log(this) } test(); console.log(x); // 1 console.log(this);
在对象中的函数使用this,表明当前的上级对象。
var obj = { name : '张三', age : 20, sayHello : function () { console.log(this.name) console.log(this) } } obj.sayHello();
function test (){
console.log(this.x) // 10
this.x = 1;
console.log(this.x) // 1
console.log(this)
}
test();
console.log(x); // 1
console.log(this);
##### 在对象中使用this 在对象中的函数使用this,表明当前的上级对象。 ```js var obj = { name : '张三', age : 20, sayHello : function () { console.log(this.name) console.log(this) } } obj.sayHello();