大家都知道,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(){})里这样定义一个跟全局变量重名的局部变量,才会出现这种情况!!
虽然是个小问题但也是我工作中遇到的,顺便提下还是需要多多注意这种比较隐晦的情况。。
相关推荐
前言 在项目中,经常会复用一些变量和函数,比如用户的登录token,用户信息等。...1、使用全局变量专用模块,挂载到main.js文件上面 全局变量模块Global.vue定义如下: const token='12345678'; const use
这是第一种方式声明全局变量。 方式2 test = 5;没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。 方式3 window.test;...
没有定义到任何函数中的变量为全局变量,在函数中定义的变量为局部变量,注意在函数内部定义变量时一定要使用var关键字,不带var关键字的变量为全局变量。 javascript中每一段代码都有与之关联的作用域链,这个作用...
6.10使用匿名函数包装全局变量 第7章处理事件 7.0简介 7.1检测页面何时完成载入 7.2使用Event对象捕获鼠标点击事件的位置 7.3创建一个通用的、可重用的事件处理函数 7.4根据修改的条件来取消一个事件 ...
在JavaScript中,可以使用全局变量或闭包的方式实现序号的递增,从而保证每个编号都是唯一的。 在上述回答中,我们使用了闭包的方式来实现序号递增。闭包是JavaScript中一种非常重要的概念,它允许在函数内部创建一...
匿名函数,也称为拉姆达函数,是一种使用JavaScript函数的强大方式。以下总结了匿名函数的特点: 任何函数表达式从技术上说都是匿名函数,因为没有引用它们的确定的方式; 在无法确定如何引用函数的情况下,递归...
Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS解释器 JS的发展史: 1、1992年 Nombas 开发...
它结合了FLASH和JavaScript的功能,以提供一种超越了传统的浏览器中标签提供的文件上传功能。 SWFUpload提供的主要功能: 在文件选择对话框中能够进行文件多选 页面无刷新的上传 提供上传进度的事件回调,实时...
针对第一点,Context API、全局变量加发布订阅的模式都可以解决,但是上面提到的方式又一个缺点,当子组件可以任意调用,以此来改变全局状态时,需要一种机制去限制,让修改数据、获取数据通过统一的状态管理器去做...
1、背景 常规的vue项目分为本地环境和生产...1)在static上设置一个config.js,把配置的参数设置成 window 下的全局变量。这种方案的确可行,但是,但是,不安全!!! 如果请求地址被恶意修改,后果不太好~ 2)使用
JSWR是一个小程序来展示JS多么奇怪一种混淆工具,可以从数字或字符串生成完全有效且不可读的代码在examples.md查看examples.md这个怎么运作? 你需要jswr.js (或meta.js如果你想在巨大的模糊版本-你可能不这样做,...
自己的闭包理解:闭包只是一种现象 ,内部函数可以使用外部函数环境中的变量,什么时候会产生闭包的现象呢 当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。 function f1(){ ...
写未声明的变量会是JavaScript环境自动产生一个全局变量。 2) 对于完全等同“===”,两个null或者两个undefined是等同的;但null与undefined是不等同的。 3) 对于相等“==”, null与undefined是相等的。若值与对象...
4.变量:js中的变量不需要提前指定类型,由赋值时动态决定 所有的变量都用var声明 5.数据类型: |--String(字符串类型) |--Number(数字类型) |--Boolean(布尔类型)0、-0、null、""、false/undefined或NaN,则该...
1在js中只有两种作用域 a:全局作用域 b:函数作用域 在ES6之前,js是没有块级作用域。 首先来解释一下什么是没有块级作用域? 所以此时 是可以打印输出变量a的值。 2:什么是变量提升? 在我们的js中,代码的执行...
如JS里在定义变量时,你要用var去声局部变量的声明,而对于弱类型的语言JS来说,你也可以不加var,但不加它会认为这个变量为全局变量,这是要注意的。变量 在程序运行过程中,其值可以发生改变的(呵呵,10多年前书...
C语言中,变量分为全局变量和局部变量;也可以这样分:自动变量,静态变量.前者是按变量作用范围来分的,而后者是按变量存储方式来分的. 如果按存储占用空间来分,可以是整型变量,字符型变量,浮点型变量等.当然还有...
我们认为这应该花费不到一个小时的时间来完成,但是请理解您可能还有其他承诺和时间限制。 编写一些代码,将任意嵌套的整数数组的平面展平为整数的平面数组。 例如[[1,2,[3]],4] -> [1,2,3,4] 。 快速开始 将此...
在网上看了一种解决方案是,在加载文件的最后置一个全局变量或改变标签的属性来区分,这样成功与否就通过这个标志位判断。但显然不太完美,还要改加载文件。 后来尝试另一种思路,先创建一个vbscript,src置成一个JS...
通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。 词法作用域: 词法作用域,也叫静态作用域,它的作用域是指在词法分析阶段就确定了,不会改变...