Alcance de JavaScript
-
- Alcance de JavaScript
- Alcance local de JavaScript
- Variables globales de JavaScript
- Ciclo de vida variable de JavaScript
- Parámetros de función
- Variables globales en HTML
- Variables y alcance en ES6
- Promoción de variables de JavaScript
- La inicialización de JavaScript no mejorará
- Declara tus variables al principio
你越是认真生活,你的生活就会越美好
——Frank Lloyd Wright
Citas clásicas de "El fruto de la vida"
Alcance de JavaScript
作用域
Sí, 可访问变量
la colección.
En JavaScript, 对象和函数
también es una variable.
En 作用域为可访问变量,对象,函数的集合
JavaScript,.
JavaScript 函数作用域
: el alcance se modifica dentro de la función.
Alcance local de JavaScript
La variable está adentro 函数内声明
y la variable es de alcance local.
只能在函数内部访问
Variables locales :.
// 此处不能调用 carName 变量
function myFunction() {
var carName = "Volvo";
// 函数内可调用 carName 变量
}
Debido a que 局部变量
solo funciona 函数内
, se 不同的函数
puede usar 相同名称的变量
.
局部变量
Creado cuando la función comienza a ejecutarse, 函数执行完后
las variables locales serán 自动销毁
.
Variables globales de JavaScript
La variable está 函数外
definida, es decir 全局变量
.
Las variables globales son 全局作用域
: 所有脚本
y se pueden utilizar funciones en la página web .
var carName = " Volvo";
// 此处可调用 carName 变量
function myFunction() {
// 函数内可调用 carName 变量
}
Si las variables 函数内没有声明
(sin usar la 该变量为全局变量
),.palabra clave
En el siguiente ejemplo, carName está en la función, pero es una variable global.
function myFunction() {
carName = "Volvo";
// 此处可调用 carName 变量
}
myFunction()
// 此处可调用 carName 变量 前提是myFunction函数执行过
console.log(carName) // Volvo
Ciclo de vida variable de JavaScript
JavaScript 变量生命周期
En ella 声明时初始化
.
局部变量
En 函数执行完毕后销毁
.
全局变量
En 页面关闭后销毁
.
Parámetros de función
函数参数
Solo 函数内
funciona, sí 局部变量
.
Variables globales en HTML
En HTML, las variables globales son objetos de ventana: todas las variables de datos pertenecen a objetos de ventana.
function myFunction() {
carName = "Volvo";
}
myFunction()
//此处可使用 window.carName
console.log(window.carName)
PD:
Sus variables o funciones globales pueden sobrescribir las variables o funciones del objeto de ventana.
Las variables locales, incluidos los objetos de ventana, pueden cubrir variables y funciones globales.
Variables y alcance en ES6
Determinar el alcance del bloque por let y const
let
Y const
las variables creadas son 只在块作用域中
válidas. Solo existen en el bloque que los contiene. El código que se muestra a continuación usa let para declarar una variable tmp en un bloque de instrucciones if. Esta variable solo es válida en la instrucción if.
function func() {
if (true) {
let tmp = 123;
console.log(tmp); // => 123
}
}
func() // 123
console.log(tmp); // => ReferenceError: tmp is not defined
Por el contrario, el var声明的变量
alcance del alcance es 函数范围内
:
function func() {
console.log(tmp) // undefined 变量声明提升 还没赋值
if (true) {
var tmp = 123
console.log(tmp) // 123
}
console.log(tmp) // 123
}
func()
console.log(tmp) // Uncaught ReferenceError: tmp is not defined
El alcance de bloque significa que puede tener sombras de variables dentro de una función.
function func() {
let foo = 5;
console.log(foo) // 5
if(true) {
let foo = 10;
console.log(foo) // 10
}
console.log(foo) // 5
}
func()
const crea variables inmutables
La let
variable creada es variable:
let foo = 'abc'
foo = 'def'
console.log(foo) // def
La const
creación de una variable 常量
, la variable está 不可变
en:
const foo = 'abc'
foo = 'def' // Uncaught TypeError: Assignment to constant variable.
Si una constante se refiere a uno 对象
, const并不影响常量本身的值
es mutable, porque siempre apunta a ese objeto, pero el objeto en sí todavía se puede cambiar.
const obj = {
}
obj.prop = 123
console.log(obj.prop) // 123
console.log(obj) // {prop: 123}
obj = {
} // Uncaught TypeError: Assignment to constant variable.
Si quieres ser obj
verdaderamente uno 常量
, debes 冻结它的值
:
const obj = Object.freeze({
});
obj.prop = 123;
console.log(obj) // {}
En otras palabras, si const定义
la constante apunta a un objeto. En este momento, en realidad apunta a la dirección del objeto actual. Esta dirección está en la pila y el objeto real está en la pila. Por lo tanto, después de usar const para definir este objeto, podemos cambiar el contenido del objeto. Pero 这个地址是不可以改变的
... Esto significa que no puede reasignar este objeto. Por ejemplo const obj= {}, obj = {}
, aun así, obj parece no haber cambiado nada, pero sigue siendo incorrecto.
Sin embargo, en el 普通模式
caso, y no hay error, mientras que obj.name = 'abc' es completamente posible. Esto está estrechamente relacionado con la forma en que JavaScript almacena el valor del objeto referenciado.
const obj = Object.freeze({
})
const newObj = {
}
obj.name = 'w3cplus'
newObj.name = 'damo';
console.log(obj) // {}
console.log(newObj) // {name: "damo"}
Utilice Babel para compilar el código ES6 anterior en el código ES5:
'use strict';
var obj = Ob
Promoción de variables de JavaScript
-
En JavaScript,
函数及变量的声明
todo será提升到函数的最顶部
. -
En JavaScript
变量可以在使用后声明
, eso es变量可以先使用再声明
. -
类
Sin promoción variable
Los siguientes dos ejemplos obtendrán el mismo resultado:
Ejemplo 1
x = 5; // 变量 x 设置为 5
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x; // 在元素中显示 x
var x; // 声明 x
Ejemplo 2
var x; // 声明 x
x = 5; // 变量 x 设置为 5
console.log(x) // 5
Para comprender los ejemplos anteriores, debe comprender " hoisting(变量提升)
".
变量提升
: 函数声明
Y 变量声明
siempre estará en silencio por el intérprete 被"提升"到方法体的最顶部
.
类
Sin promoción variable
new Foo() // Uncaught ReferenceError: Foo is not defined
class Foo {
}
La inicialización de JavaScript no mejorará
En JavaScript, solo se promoverán las variables declaradas, no las inicializadas.
Ejemplo 1
var x = 5; // 初始化 x
var y = 7; // 初始化 y
console.log(x) // 5
console.log(y) // 7
Ejemplo 2
var x = 5; // 初始化 x
console.log(x) // 5
console.log(y) // undefined
var y = 7; // 初始化 y
La y del Ejemplo 2 da como resultado indefinida, esto se debe a que se promueve la declaración de variable (var y), pero la inicialización (y = 7) no se promoverá, por lo que la variable y es una variable indefinida.
El ejemplo 2 es similar al siguiente código:
var x = 5; // 初始化 x
var y; // 声明 y
console.log(x) // 5
console.log(y) // undefined
y = 7; // 设置 y 为 7
Declara tus variables al principio
Para la mayoría de los programadores no lo sé JavaScript 变量提升
.
Si los programadores no comprenden bien la promoción de variables, los programas que escriben son propensos a algunos problemas.
Para evitar estos problemas, usualmente usamos 在每个作用域开始前声明
estas variables, que también es un paso de análisis de JavaScript normal, que es fácil de entender para nosotros.
谢谢你阅读到了最后~
期待你关注、收藏、评论、点赞~
让我们一起 变得更强
Alcance de JavaScript de referencia
Se recomienda leer y
comprender el punto de esto en js (algunas reglas más ejemplos + llamar, aplicar, enlazar para cambiar este punto)