大家都知道,js全局变量是每个js函数都能访问和改变其值的,它的作用范围也是整个js文件。但是最近我却碰到一种情况导致全局变量在某个“角落”访问不到,很郁闷。但是却是一个值得注意的小细节,记录下吧。
<html> <head> <script src="jquery-1.8.3.min.js"></script> <script> var dimen = 'day';//全局变量 $(function(){ //console.log("dimen:" + dimen); $("#btn").click(function() { alert(dimen); }); if(false) { var dimen = 'good'; } }); function change() { dimen = $("#time").val();//改变全局变量 //some code.... } </script> </head> <body> <input type="button" value="测试" id="btn" /> <select id="time" onchange="change()"> <option value="year">年</option> <option value="year">月</option> <option value="year">日</option> </select> </body> </html>
这个页面上点击“测试”按钮你会发现直接弹出undefined,奇怪的是dimen不是全局变量吗怎么会访问不到呢?
仔细检查你的$(function(){})函数里面的这段代码:
if(false) { var dimen = 'good'; }
你会发现你又重新定义了一个局部变量dimen,和全局变量重名了,这导致dimen瞬间变成局部变量而外部访问不到了。经测试,只有你在$(funciton(){})里这样定义一个跟全局变量重名的局部变量,才会出现这种情况!!
虽然是个小问题但也是我工作中遇到的,顺便提下还是需要多多注意这种比较隐晦的情况。。
相关推荐
在JavaScript中,全局变量是一种可以在整个程序中任何地方访问的变量,它们的作用域跨越函数和代码块。本篇文章将深入探讨JavaScript声明全局变量的几种方法以及如何访问这些变量。 1. **全局变量的声明方式** - ...
这是因为浏览器在背后默默地将ID映射到`window`对象上,如果在代码中直接通过ID访问元素,可能会与已声明的全局变量冲突,导致意外的结果。 在Chrome和某些版本的Firefox中,如果`window`对象在初始时没有`foo`属性...
在JavaScript中,声明全局变量有三种主要方式,每种方式都有其特点和适用场景。以下是详细的分析: 1. 显式声明:使用`var`关键字 这是最常见的方式,通过在函数外部或脚本的顶部使用`var`关键字声明变量,使其成为...
在JavaScript编程中,隐式全局变量是指那些未通过`var`、`let`或`const`关键字明确声明为局部变量,却意外地成为全局变量的情况。这种现象通常会导致不可预知的行为,即所谓的“bug”。本文将通过一个具体的示例来...
全局变量模块挂载到 Vue.prototype 里,可以使得全局变量在所有组件中都可以访问。例如,我们可以在 main.js 中添加以下代码: ```javascript import global_ from './components/tool/Global' Vue.prototype....
例如,在for...in循环中遍历window对象时,通过第一种和第二种方式声明的全局变量可能无法被遍历到,而第三种方式声明的变量则可以。具体表现为,IE浏览器的不同版本间行为不一致,而其他浏览器如Firefox、Chrome等...
除了使用`static`关键字外,还可以利用Unity3D中的`HttpRuntime.Cache`作为全局变量的另一种实现方式。这种方式适用于需要缓存数据的情况,尤其是在需要跨场景持久化存储数据时特别有用。 **示例代码**: ```...
这是一种简单的全局变量实现,但数据变更不易追踪,且可能引发并发问题。 6. **自定义事件中心**: uni-app提供了事件总线(Event Bus)的概念,可以通过创建一个Vue实例作为事件中心,发布和订阅事件来传递数据。...
这解释了为什么在`GodDamnTest1`的匿名函数中,`alert(a)`能够访问到`123`(全局变量`a`),而`alert(this.a)`显示`undefined`,因为`this`在该函数中指向`DOMWindow`。 关于删除局部变量,实际上在JavaScript中,...
然而,由于JavaScript的全局变量机制,不恰当的变量使用容易导致全局变量污染,从而影响代码的可维护性和稳定性。以下是防止全局变量污染的一些方法和注意事项: 1. **命名空间**: 创建一个全局命名空间对象,将...
另一种方法是将全局变量模块(如`Global.js`)中的内容挂载到`Vue.prototype`对象上。这样,全局变量和函数就成为了Vue实例的原型属性,所有Vue组件都可以直接通过`this`访问。在`main.js`的入口文件中,我们引入`...
在JavaScript中还存在一种特殊的现象,即在构造函数内部声明的变量,如果不使用`var`、`let`或`const`声明,则该变量会被认为是全局变量。但在某些情况下,这种行为似乎不符合预期,出现了一种被称为“神奇现象”的...
当函数访问某个变量时,如果在当前作用域内找不到,它会向上一级作用域查找,直到到达全局作用域。这一机制确保了代码内部的变量不会被外部错误地修改。 在JavaScript中,全局变量是全局对象的属性,对于浏览器环境...
标题中的问题涉及到JavaScript和jQuery,特别是如何通过函数正确地修改全局变量并确保其在后续操作中生效。在描述中,作者遇到了一个博客评论系统的问题,当用户点击“最后一页”链接时,期望立即加载最后一页的评论...
Module模式是一种广泛使用的JavaScript设计模式,用于封装代码,避免全局命名空间的污染。 - **Module模式的原理**: - **私有变量与函数**:通过IIFE(Immediately Invoked Function Expression,立即执行函数...
标题“全局JS中不可调用页面元素的属性”涉及到JavaScript编程中的一个重要概念,即JavaScript的运行环境和作用域。在JavaScript中,全局变量和局部变量的区分是非常关键的,而页面元素(如DOM元素)的访问则有其...
与第一种方式不同,挂载到Vue.prototype后,可以通过Vue实例直接访问这些全局变量或方法,无需导入模块。在程序入口文件main.js中,可以使用import语句将全局变量模块引入,并将其实例赋值给Vue.prototype,从而实现...
JavaScript中的全局变量和局部变量是编程中至关重要的概念,它们决定了变量的作用范围和生命周期。本文将深入探讨这两种变量类型,并通过实例解析它们的工作原理。 首先,全局变量是在函数外部定义的变量,它在整个...
在现代JavaScript编程中,不推荐过度依赖全局变量。全局变量可能会导致命名冲突和代码难以维护。应当尽量使用局部变量或者通过模块化、闭包等技术来管理状态,减少全局变量的使用,以提高代码的可维护性和可读性。 ...
JavaScript中的全局变量是一种常见但又潜在问题的数据存储方式。它在程序中扮演着全局作用域的角色,可以在任何地方被访问,这使得它成为一个方便的工具,但也可能导致一系列问题。 首先,我们要理解为什么尽量少用...