Js基本语法
Defer 推迟,解析页面完才加载脚本文件
Async 新线程,异步执行脚本文件同时加载画面
异常:Try{代码段} catch(e){ e.message } finally{总能执行} (js可省略finally,无须使用多个catch)
自定义异常,系统异常
Var 变量提升机制,提升到该函数体之上,只是声明不是赋值
Let 好处,
1.有块作用域
2.全局变量不添加window对象属性
3.不会提前加载
递归函数:自己调用自己(函数本身)
局部变量:var定义的变量,函数内使用,使用完销毁,不占任何内存
全局变量,函数外定义,不使用var定义的变量
Typeof()和Instanceof的区别
数组的foreach ( 遍历数组 ) 和map (创建一个新的new_array )
With 避免重复输入对象
With(document){
Writeln(“ 123 ”);
Writeln(“ 123 ”);
Writeln(“ 123 ”);
}
1. 分支语句 if、switch
2. 循环语句
for
while
do while
for in (遍历数组所有元素、对象的所有属性)
continue
break
函数定义 function
三种方式
1.常规
Function functionName(parameter-list){}
2.匿名函数
就是不给它函数名,定义一个函数对象赋给一个变量
Var f = fun(){}
3.类匿名函数
Var f = new fun(); 接受一系列参数,最后一个参数是函数的执行体。
Js函数
1.被调用 (java一样正常被调用)fun( 参数 );
2.对象 (创建一个对象,该对象是Function实例)var k = { w: fun() } k.w
3.方法 (附加给一个对象,作为它的方法)类的方法 window.fun()
4.变量 (得到一个变量)会覆盖(不能变量和函数(内置函数)同名)
5.类 (同名类)
直接调用 var t = fun test() 1 原来test() 不存在,t(“ ”); 没有任何返回值
类的构造器 var t = new fun() t instanceof object 总有一个返回对象
定义p函数(类的定义)5
fun p(name,age){ this.name = name; p.age = age; this.info = function{} ; }
//this.name/age/info 都是p类的属性和方法
实例化对象 var a = new p (“小米”,12);
注意:类属性访问 p.info 和 对象访问 a.info不一样的
Js 动态语言,和java不一样,能给对象添加新属性和方法
函数调用三种方式
3种方式
1.直接调用 ( 通过附加对象作为调用者,传入所需要的参数)
2. call()( 动态调用)
调用者.(参数1,参数2) = 函数. call( 调用者,参数1,参数2)
例子:
each(array , fn ){ for(var index in array) { fn.call(null , index , array[index]) } }
fn.call()传给fn函数参数
each( [1,2,3] , fn(index,ele){ document.write(“” + index + “” + ele) });
3.apply() ( 动态调用函数 )
函数引用.apply( 调用者, [ 参数1,参数2 … ])
= 函数引用.call(调用者, 参数1,参数2 …)
例子:
Var mf = fun(a,b){ alert(“” + a “” + b )};
Var example = fun(num1,num2){ mf.apply(this , argument) } argument表示传入的所有参数
Example(20,40);
函数独立性(调用者的属性和方法 )
匿名内嵌函数方法定义类的 内嵌函数 也是独立的(别人可以通过call来调用)
也可以用 dog.info.call( 调用者cat(其他类或者window) )调用
函数提升:js允许(普通函数、局部函数)函数提升到<script../>元素、函数内顶部(var和变量提升一样)
匿名函数(匿名局部函数)不行(只提升变量)
函数名不使用var、let 则它的变量是全局变量(函数也就是全局可用的函数)
尽量避免变量定义和函数重名
定义变量不赋值,函数优先级高于变量,输出函数
定义变量赋值,函数优先级低于变量,输出变量 (函数被覆盖)
箭头函数 ( 相当于 其他语言的Lambda表达式 或 闭包语法 )
简化:
Function不要 , 用->箭头表示
注意:参数、语句只有一个时,不需要括号、花括号。
如果函数不需要形参,不能省略。
一条Return语句,也可以省略。
箭头函数不拥有自己的this。
普通函数而言,用new fun() 创建一个对象,this表示就是这个对象
直接调用普通函数,this代码的是window
定义箭头函数,this代表的是上下文的。
例如在全局范围定义就是window本身
注意:箭头函数
1. 返回一个对象是 =>( { name : “ ” } );
2. =>前不能换行
3. 解析顺序的问题 有必要加个括号()
函数参数处理 (和Java类似)
1. 基本类型 和 复合类型(对象,数组) 都是值传递
2. 空参数:自动传入undefined ;没有重载,相同名字会覆盖前面的函数
3. 参数类型 “鸭子类型“
先判断 类是不是对象,传入的类属性是什么类型符不符合类的属性类型。
闭包:函数里面的函数,使局部变量扩展到函数之外的地方去
prototype属性: p. prototype.walk() 原来那个没有walk()的方法不存在了,伪继承
内建类的扩展
Array. Prototype.index0f = function(obj) { … }
arr[].indexoff( obj )
子类的原型可设父类的实例,来实现继承父类的方法
student. Prototype = new person(“ ”, );
student Instanceof person/ student
构造器实现伪继承
this.inherit_temp = person
this.inherit_temp( name,age );
call实现伪继承
person.call( student , 参数1,参数2)
apply实现伪继承
person.apply( student, [ 参数1,参数2 ] )
new创建构造器来创建对象
new Object() 来创建对象,可以随时添加属性和方法
new function()添加方法
DOM 文档对象模型(W3C组织倡导)
功能:访问,增,删,改 结构化文档,动态的修改HTML能力