`
123003473
  • 浏览: 1059921 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

var与Javascript变量隐式声明

阅读更多
在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。

    诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“隐式”声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现。
除此之外,今天通过同事介绍,了解到这种“隐式声明”中的别外一个问题。
当你在当前上下文内进行这种“隐式”声明时,JavaScript引擎会先在当前上下文中寻找是否之前有声明此变量,如果没有,再到上一级的上下文中去寻找,如果一直未找到,会最后在window上声明这个变量!
比如:

view plaincopy to clipboardprint?
window. y = "hello";  
function func(){  
y = "OH, NO!!!";  
}  
func();  
alert(window.y); //#=> display "OH, NO!!!"  
window. y = "hello";
function func(){
y = "OH, NO!!!";
}
func();
alert(window.y); //#=> display "OH, NO!!!"



  

     当上下文中的任意一层有这种“隐式”定义的变量时,那么该层的该变量会被修改,而不会在window上生成一个新的变量。(这种bug也挺讨厌的,尤其是封装的比较复杂的代码)
比如:

view plaincopy to clipboardprint?
var x = "window.x";  
function a() {  
var x = "a's x";  
var b = function() {  
var c = function() {  
//no var!  
x = "c's x:";  
};  
alert("before c run,the b.x:" + x);  
c();  
alert("after c run, the b.x:" + x);  
};  
alert("a.x is:" + x);  
b();  
alert("after b function runed, the a.x is:" + x);  
};  
alert("before a run, window.x:" + x);  
a();  
alert("after a run, window.x:" + x); 
var x = "window.x";
function a() {
var x = "a's x";
var b = function() {
var c = function() {
//no var!
x = "c's x:";
};
alert("before c run,the b.x:" + x);
c();
alert("after c run, the b.x:" + x);
};
alert("a.x is:" + x);
b();
alert("after b function runed, the a.x is:" + x);
};
alert("before a run, window.x:" + x);
a();
alert("after a run, window.x:" + x);


     这里面有以下几层:window, func a, func b, func c一直作层级嵌套。window->a->b->c
window和a中,都有定义变量x,b中未定义该变量,在c中‘隐式'声明了一个x,该x最终修改了a变量的值。
牢记,在JavaScript中,声明变量,一定前面要加var .
分享到:
评论

相关推荐

    Javascript var变量隐式声明方法

    变量可以使用var关键字进行显式声明,也可以在不使用var的情况下进行隐式声明。了解这些隐式声明的机制,对于编写可靠的JavaScript代码至关重要。 首先,关于变量声明的关键字var,在早期JavaScript编程中,var是...

    JavaScript变量声明详解.pdf

    JavaScript中的变量声明是编程的基础,理解这一概念对于编写健壮的代码至关重要。本文将深入探讨JavaScript中的变量声明,包括全局变量、...对于更多JavaScript变量声明的深入学习,可以参考IT技术专栏获取相关信息。

    JavaScript变量声明详解

    JavaScript变量声明是编程基础中的重要一环,理解变量声明对于编写有效的JS代码至关重要。本文将深入探讨JavaScript中的变量声明方式,以及与之相关的全局变量、局部变量、隐式全局变量和“hoisting”(悬置/置顶...

    javascript 显示全局变量与隐式全局变量的区别

    // 隐式声明的全局变量 console.log(a); // a console.log(b); // b console.log(window.a); // a console.log(window.b); // b 在 js 中全局变量其实是global对象(window)的属性,因此两种方式声明的全局变量都...

    JavaScript声明变量时为什么要加var关键字

    总结而言,虽然在JavaScript中可以不使用`var`关键字来声明变量,但是这样做会带来很多问题,比如隐式全局变量的问题以及变量作用域难以控制等。因此,为了避免这些问题,强烈建议在声明变量时明确使用`var`(或者更...

    JavaScript的变量声明与声明提前用法实例分析

    本文实例讲述了JavaScript的变量声明与声明提前用法。分享给大家供大家参考,具体如下: JavaScript的变量声明 JavaScript的变量声明语句无论出现在何处,都会先于其他代码首先被执行。使用var关键词声明变量的作用...

    js for循环,为什么一定要加var定义i变量.docx

    - **分析**:`WriteNumber`中未声明`i`,因此`i`被隐式声明为全局变量。在`TenTimes`中声明了`i`,因此这里的`i`是局部变量,与全局的`i`无关。`alert(i)`时,由于`i`尚未被赋值,因此输出`undefined`。由于`...

    浅谈JavaScript中定义变量时有无var声明的区别

    本文将详细探讨使用var定义与不使用var定义变量之间的区别,尤其是在JavaScript的函数作用域和全局作用域中。 首先,让我们讨论函数作用域。在JavaScript中,当使用var关键字在函数内部定义一个变量时,该变量会...

    javascript变量声明实例分析

    接下来,我们将深入探讨JavaScript变量声明的相关知识点。 首先,JavaScript中变量的声明方式主要有三种关键字:var、let和const。这里,我们将重点讨论var关键字,因为它是较早期版本JavaScript中唯一的声明方式,...

    javascript定义变量时带var与不带var的区别分析

    `开启),如果尝试不使用`var`关键字声明变量,JavaScript会抛出错误,防止隐式全局变量的产生,从而避免潜在的bug。 3. 变量提升(Hoisting): JavaScript中的变量声明会被提升到其所在作用域的顶部,不论声明的...

    javascript中局部变量和全局变量的区别详解

    javascript有两种变量:局部变量和全局变量。...而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的。 例如: 代码如下: function myName() {  i = ‘yuanjianhang’; } myName(); function sa

    浅析JavaScript声明变量

    总结来说,JavaScript变量声明是一个多维度的话题,涵盖了声明方式、作用域、提升机制等关键概念。掌握这些概念对于编写清晰、健壮和可维护的JavaScript代码至关重要。在实际开发过程中,推荐使用let和const代替var...

    js变量声明var使用与不使用的区别详解

    首先,我们必须了解变量声明的两种类型:显式声明与隐式声明。显式声明是指使用var关键字来声明一个变量,例如:`var name = 'muzidigbig';`。而隐式声明则是没有使用var关键字,直接对一个变量进行赋值操作,如`...

    基于JavaScript 声明全局变量的三种方式详解

    2. 隐式声明:不使用`var`关键字 如果不使用`var`关键字直接赋值,JavaScript会隐式地在全局作用域中声明变量。例如: ```javascript test = 5; // 全局变量 function a() { aa = 3; // 也是全局变量 alert(test);...

Global site tag (gtag.js) - Google Analytics