JS中的预解释
627 字
3 分钟
JS中的预解释
预解释的基础知识
例子:
console.log(d);//-->function d(){};d=1;//-->d=1s=d;//-->s=1function d(){//-->xxxfff000
}d();//-->d is not a function-
1.预解释:
是一个过程,作用域形成之后,代码执行之前,把所有带
var关键字和function提前声明或定义。 -
2.作用域:
- 全局作用域:
window下,一打开浏览器就会形成。 - 私有作用域:一个函数就是一个私有作用域,函数一执行就会形成私有作用域。
- 全局作用域:
-
3.声明:
告诉浏览器这里有个变量,
var关键字的只有声明。 -
4.定义:
赋值过程,在预解释的时候
function即声明还定义。 -
5.注意:
预解释的时候遇到变量已经声明过了就不用声明了,但是需要重新定义,例如:
//变量只声明未定义就是undefinedconsole.log(obj1);//-->undefinedvar obj1={name:"111"};console.log(fn);function fn() {}// 1. 全局作用形成// 2. 全局作用域下的预解释:var obj1,function fn=xxxfff000// 3. 代码执行:// 1.console.log(obj1);-->undefined// 2.obj1=xxxfff111// 3. console.log(fn);-->function fn() {}
预解释的几种特殊情况
注意: 全局作用域下的变量就是window的一个属性
1.=右边函数不进行预解释
函数作为值的时候,绑定事件的时候,不进行预解释,如下:
var ff=function () { console.log(1);};2.return后面的代码不执行但是需要预解释
return出的内容执行但是不进行预解释:
function fn() { var a=0; console.log(f);//function f(){} return function () { console.log(1); return 1 }; function f() {}}var d=fn();console.log(d());fn()();3.在条件语句中
- 不管条件是否成立都进行预解释
console.log(num); if (0){ //虽然条件不成立 但是需要预解释 var num=0 } ss=0;//->window.ss=0 console.log("ss" in window);-
条件中有函数
function在条件中的
var和function只声明不定义,声明的时候当遇到变量已经被声明了,就会报错。if('a' in window){var a=1;function(){};//-->'a' has already been declared}条件一旦成立,首先给函数赋值
console.log(a);if ("a" in window){console.log(a);a=1;function a() {}console.log(a);}//预解释:function a -->就相当于给window增加一个“a”属性//"a" in window 就是true//条件成立第一步先给function a赋值=xxxfff000//代码执行:console.log(a);xxxfff000->function a() {}// a=1,重新给a赋值
4.自执行函数 不进行预解释
//console.log(sss);(function sss() { console.log("a")})();5.函数作为参数的时候不进行预解释
[1,2,3].sort(function(a,b){return a-b;});6.预解释的时候遇到已经声明过得变量不需要声明了,但是需要定义
var s1=1;function s1() {//s1=xxxfff000 console.log("s1")}function s1() {//s1=xxxfff111 console.log("s11")}console.log(s1);支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!












