JS(JavaScript)
一.毛病与非常
1.概述
毛病,指顺序中的非正常运转状况,在别的语言中称为非常或毛病将每一个毛病中建立个Error对象,形貌包含的毛病信息
经由过程运用JavaScript供应非常的处置惩罚语句,可以用结构化体式格局捕捉发作毛病,非常处置惩罚代码与中心代码完成星散
2.try…catch语句
- try…catch语句
是指JavaScript中处置惩罚非常一种规范体式格局,try语句是为尝试,如涌现毛病,则以catch语句举行捕捉
try{
//用于捕捉指定语句中毛病与非常
console.log(v);
// 挪用未定义变量-语法报错
}
catch(error) {
//e-示意try语句中涌现毛病信息
console.log(error);
}
finally {
console.log(error);
}
3.毛病范例
- throw语句
用来抛出一个用户自定义的非常,throw后的语句将不会被实行,且掌握被通报到挪用第一个catch块,如没有catch块,将停止顺序
function fn(v) {
if (v) {
} else {
throw { name : '犬夜叉'};
}
}
// console.log(fn(10));//10
// console.log(fn());
var result;
try {
result = fn();
} catch (e) {
result = 'unkown';
console.log(e.name);
}
console.log(result);
二.this关键字
1.概述
定义个函数并一定要返回个对象,经由过程挪用定义对象的位置
- this基础用法
//定义一个全局变量
var v = 100;
//this常常定义在函数的作用域中
function fn() {
//this老是要返回一个对象
console.log(this.v);
// this指向哪一个对象不取决于函数定义位置
}
//this指向哪一个对象,取决于挪用的位置
//fn();//函数的挪用
// 定义个对象,将fn函数作为obj对象的要领
var obj = {
v : 200,
f : fn
}
console.log(this.v);
2.绑定划定规矩
- 隐式绑定丧失
是指被隐式绑定函数丧失绑定对象,则为默许绑定,从而把this绑定到全局对象
var v = 100;
//定义哥全局变量
function fn() {
//定义个函数
console.log(this.v);
}
var obj = {
v : 200,
f : fn
//对象的f()要领指向fn()函数
}
//定义个全局变量,并被赋值为对象obj的f()要领
var fun = obj.f;
//将fun作为个函数举行挪用
fun();
- 显式绑定
明白在挪用时,this绑定对象,JS供应这apply()和call()两个要领完成,第一个参数吸收是个对象,把这对象绑定this,接着挪用函数是这个this
var v = 100;
//定义哥全局变量
function fn() {
//定义个函数
console.log(this.v);
}
var obj = {
v : 200,
f : fn
//对象的f()要领指向fn()函数
}
//定义个全局变量,并被赋值为对象obj的f()要领
var fun = obj.f;
//将fun作为个函数举行挪用
fun.apply(obj);
- new绑定
在JS中组织函数运用new操作符挪用函数,内置包含对象函数一切函数都可以挪用函数
1新建立个全新对象
2新对象绑定到函数挪用this
3该函数如没有返回别的对象,则new表达式的函数会返回到新的对象
function Hero(name) {
this.name = name;
}
var hero1 = new Hero('犬夜叉');
var hero2 = new Hero('戈薇');
3.绑定破例
- 被疏忽的this
null和undefined绑定在this对象,以call,apply或bind挪用会被疏忽
function fn(){
//定义个函数
console.log(this.v);
}
var v = 100;
//定个全局变量
fn.call(null);//undefined
//用call来挪用函数
var result = Math.max.apply(null, [1,2,3,4,5,2,3]);
console.log(result);
- 间接援用
有意无意的建立个函数,并挪用这个函数为默许绑定
function foo() {
console.log( this.a );
}
var a = 2;
var o = {
a: 3,
foo: foo
};
o.foo(); // 3
var p = { a: 4 };
// p.foo = o.foo;
// p.foo();// 4
(p.foo = o.foo)(); // 2