一、typeof 和intanceof 的区别
typeof是一个一元运算符,放在运算数之前,运算数可以是任意类型,返回运算数的类型;
intanceof 是用来判断一个变量是否是某个对象的实例。
二、延长作用域链的方法:
1、try-catch语句的catch块,会创建一个新的变量。
2、with语句,将指定的对象添加到作用域链中。
var o = {href:'2222'};
var herf = "www"
function buildUrl(){
var qs ="?debug=true";
with(o){
var url = href+qs;
}
return url;
}
var result= buildUrl();
alert(result)
with首先查找相关对象的属性,如果没有 ,才改变变量的值。
三、callee的用法
1 这个属性只有在函数执行时才有效
2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length
3 它可以用来递归匿名函数。
function factorial(num) {
if(num<=1) {
return 1;
}else {
return num*arguments.callee(num-1); //消除耦合现象;
}
}
var trueFactorial = factorial;
factorial=function (num) {
return 0;
};
console.log(trueFactorial(7));
console.log(factorial(7));
四、caller 用法
1 这个属性只有当函数在执行时才有用
2 如果在JavaScript程序中,函数是由顶层调用的,则返回null
function outer() {
inner();
}
function inner(){
alert(arguments.callee.caller)
}
outer();