变量的提前声明
Posted TM_cc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量的提前声明相关的知识,希望对你有一定的参考价值。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>变量的声明提前</title> 8 </head> 9 <body> 10 <script> 11 12 /** 13 * 变量的申明提前 14 * - 使用 var 关键字声明的变量,会在所有代码执行前被声明(但不会被赋值) 15 * 但是如果声明变量时不使用 var,则变量不会被提前声明 16 */ 17 18 console.log(a) 19 var a = 123; // a 被提前声明, 但未赋值 console.log(a) = undefined 20 21 var b = 456; 22 console.log(b) // b 被提前声明,再逐行执行代码, b被赋值‘456’ console.log(b) = 456 23 24 25 /** 26 * 函数的声明提前 27 * - 使用函数声明形式创建的函数-----function 函数(){} 28 * 它会在所有代码执行前就被创建,所以可以在函数声明前来调用函数 29 * - 使用函数表达式创建的函数,不会被提前声明,不能在声明前调用 30 */ 31 32 33 //函数声明,会被提前创建 34 fn1(); 35 function fn1 () { 36 console.log(\'我是fn1函数\') 37 } 38 39 //函数表达式,不会提前创建 40 var fn2 = function () { // fn2 变量被提前声明,但未赋值 41 console.log(\'我是fn2函数\') 42 } 43 fn2(); 44 45 46 /** 47 * 函数作用域 48 * - 调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁 49 * - 每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的 50 * - 在函数作用域中可以访问到全局作用域的变量 51 * 在全局作用域中无法为访问到函数作用域中的变量 52 * - 当函数作用域操作一个变量时,它会在自身作用域中寻找,有就会直接使用,没有就会向上一级中寻找,直到全局作用域 53 * 访问全局中的变量可以用 Windows对象 54 * - 在函数中不用 var 声明的变量会成为全局变量 影响全局 55 * - 如果函数有形参 a,再在函数中定义变量 a,不会影响到全局中的变量a,会赋值给形参 56 * 57 */ 58 59 var c = 1; 60 var d = 1; 61 62 function fn3 () { 63 c = 2; 64 var d = 4; 65 e = 5; 66 } 67 fn3(); // 调用函数 68 console.log(c) // c = 2 ; 没有用 var 声明 c 变量,使全局变量 c 重新赋值为2 69 console.log(d) // c = 1 ; 用 var 声明变量;没用影响到全局变量 d 70 console.log(e) // 函数内没有用 var 关键字声明,e 为全局变量,可以被外部访问到 71 72 73 /** 74 * 定义形参就相当于声明了一各变量 75 */ 76 77 f = 111 78 function fn6 (f) { 79 // 相当于声明了一份 var f; 80 alert(f); 81 f = 123; // f 赋值给了形参,不会影响到全局变量f 82 } 83 fn6(); // 为传参,undefined 84 alert(f) 85 86 </script> 87 </body> 88 </html>
声明提前js变量
声明提前问题相关
js的变量声明语句无论出现在何处,都会先与其他代码首先被执行,使用var声明关键词声明变量的
作用于是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量
想一个未声明变量复制会隐式地转换为全局变量(它编程了库对象的一个属性)声明变量与未声明变量之间的区别为:
1,声明变量的作用范围限定在其执行的上下文环境中,未生名的变量总是全局的
2.声明变量在其他代码执行之前创建,未声明的变量在其赋值语句执行之前都是不存在的
3.声明变量是执行上下文(函数或者全局)的不可配置的属性,而未声明变量是可配置的比如 可以被删除
delete成功v已经不存在了
a删除不掉,因为a是声明变量有不可配置的属性,
局部变量在整个函数体内始终是有定义的,
<script>
var a=100;
function fun(){
alert(a);//underfind
var a=200;
alert(a);//200
}
fun();
alert(a);//100
var a;
alert(a);//100
var a=300;
alert(a);//300
</script>
以上是关于变量的提前声明的主要内容,如果未能解决你的问题,请参考以下文章