Preanálisis
Primero comprenda el mecanismo de ejecución del código js
Pre : pre, antes de que se ejecute todo el código
Análisis : explique, lea y explique el código
js es pre-analizar primero, luego ejecutar el código
¿Qué se analizó?
1. Var palabra clave
El análisis previo declarará las variables definidas por la palabra clave var antes de que se ejecute el código, pero no asignará valores en este momento
console. log ( num) ;
var num = 100 ;
console. log ( num) ;
El proceso de ejecución real
var num;
console. log ( num) ;
num = 100 ;
console. log ( num) ;
2. Funciones declarativas
En la memoria, primero declare que un nombre de variable es un nombre de función y que el contenido representado por este nombre es una función
fn ( ) ;
function fn ( ) {
console. log ( "我是fn函数" ) ;
}
El proceso de ejecución real
function fn ( ) {
console. log ( "我是fn函数" ) ;
}
fn ( ) ;
Nota:
Función de asignación: var fn = function(){}
Analizar de acuerdo con las reglas de var
fn ( ) ;
var fn = function fn ( ) {
console. log ( "我是fn函数" ) ;
}
El proceso de ejecución real
var fn;
fn ( )
fn = function fn ( ) {
console. log ( "我是fn函数" ) ;
}
fn ( ) ;
Caso resuelto previamente
Cuando una función y una variable tienen el mismo nombre, la función prevalecerá en la etapa de preanálisis.
primera pregunta:
fn ( ) ;
var fn = 100 ;
fn ( ) ;
function fn ( ) {
console. log ( "我是 fn 函数" ) ;
}
fn ( ) ;
预解析阶段
1. var fn
2. function fn ( ) {
... }
3. 声明 fn 变量
4. 声明 fn 变量 并且赋值为一个函数
5. 预解析结束的时候,浏览器记录的 fn 变量是一个函数
代码开始执行
1. fn ( )
2. fn = 100 ;
3. fn ( )
4. fn ( )
fn ( ) ;
function fn ( ) {
console. log ( "我是 fn 函数" ) ;
}
fn ( ) ;
var fn = 100 ;
fn ( ) ;
预解析阶段
1. function fn ( ) {
... }
2. var fn
代码开始执行
1. fn ( )
2. fn ( )
3. fn = 100 ;
4. fn ( )
Pre-análisis de peligros ocultos
Ya sea que se establezca la condición if o no, el código interno se analizará previamente
console. log ( num) ;
if ( false ) {
var num = 100 ;
}
console. log ( num) ;
console. log ( num) ;
if ( false ) {
var num = 100 ;
}
console. log ( num) ;
console. log ( num) ;
if ( false ) {
var num;
num = 100 ;
}
console. log ( num) ;
Aunque el código detrás de return no se ejecuta, también se analizará previamente
function fn ( ) {
var num = 100 ;
console. log ( num) ;
console. log ( n) ;
return ;
var n = 200 ;
}
fn ( ) ;
function fn ( ) {
var num;
var n;
num = 100 ;
console. log ( num) ;
console. log ( n) ;
return ;
n = 200 ;
}
fn ( ) ;
Sugerencias de análisis previo
Sugerencias para escribir código:
1. 函数名 不要与 变量同名
2. 变量名以名词为主,2 个或3 个单词组合使用
如:username,userInfoAge
3. 函数名以功能区分,尽量语义化
如:getColor ( ) ,setColor ( )
4. 尽量使用 赋值式函数 来定义