预解析-基础知识总结------彭记(010)
预解析
-系统会将function定义的函数提升到当前作用域最顶端
-还会将var的声明提升到当前作用域的最顶端
<script>
/*test();
function test(){
console.log(123);
}
/!*系统会将function定义的函数提升到当前作用域最顶端*!/
function test(){
console.log(123);
}
test();*/
/*console.log(age);
var age = 20;*/
/*系统还会将var的声明提升到当前作用域的最顶端*/
/*var age;
console.log(age);
age = 20;*/
//test();//456
/*1.函数同名的时候,后面声明的函数会将前面声明的函数覆盖*/
/*function test(){
console.log(123);
}
function test(){
console.log(456);
}*/
/*2.变量和函数同名
/*alert(foo);//function foo(){}
function foo(){}
var foo = 2;
function foo(){} //var foo = function(){}
var foo;
alert(foo)//2
foo=2*/
/*function foo() {
/!*函数内部的变量名提升只会提升到当前函数的最顶端*!/
var num = 123;
console.log(num); // 123
}
foo();
/!*函数外部不能直接使用函数内部声明的成员*!/
console.log(num); // is not defined*/
/*var scope = "global";
function foo() {
console.log(scope); //undefined
var scope = "local";
console.log(scope); //local
}
foo();*/
/*---------*/
/*function foo() {
/!*如果函数内部有某个成员,就会优先使用内部的成员,如果没有再使用外部声明的成员*!/
var scope;
console.log(scope); //undefined
scope = "local";
console.log(scope); // local
}
var scope;
scope = "global";
foo();*/
/*var num = 123;
function f1(num) { // 参数理解为:函数内部的一个变量
var num =456;
console.log(num); //456
}
/*函数表达式并不会被提升:因为函数是其中的值--相当于赋值操作*/
/*test();
var test = function(){
console.log(123);
}*/
console.log(typeof ksdjgfyadsgfyj); //undefined
/*条件表达式中的函数声明不会提升*/
console.log(typeof func);
if(true){
function func(){
return 1;
}
}
console.log(typeof func);
</script>
综合变态面试题:
<script>
function Foo() {
getName = function(){ alert(1); };
return this;
}
Foo.getName = function() { alert(2); };
Foo.prototype.getName = function(){ alert(3); };
function getName(){ alert(5); }
var getName;
getName = function() { alert(4); };
/*构造函数的静态成员*/
Foo.getName(); // 2
getName(); // 4
/*将构造函数当成普通函数调用:this就是当前window对象 Foo().getName(); 》》 this.getName()*/
Foo().getName(); // 1
/*构造函数中将这个全局的成员重置了*/
getName(); // 1
console.log(new Foo.getName()); // 2
/*先创建对象,再使用对象调用函数*/
new Foo().getName(); // 3
console.log(new new Foo().getName()); //3
</script>

浙公网安备 33010602011771号