JavaScript某行代码执行的时候,用到了某个变量,但是这个变量根本找不到在哪里定义了(或者说看上去根本没有定义过)是怎么回事,是怎么执行的?

原创 2017年11月28日 18:36:48

JavaScript某行代码执行的时候,用到了某个变量,但是这个变量根本找不到在哪里定义了(或者说看上去根本没有定义过)是怎么回事,是怎么执行的?

如下:

1)我通过jQuery给某个标签增加了一个click事件。

(function($) {

$(“#button”).click(function() {

          var $this = $(this);
            var htmlUrl = $this.attr("htmlUrl");

            openPage(htmlUrl);
            parseMyType($html)

        })

})(jQuery);


2)我在html页面上点击该button,会执行:

    var $this = $(this);
            var htmlUrl = $this.attr("htmlUrl");

            openPage(htmlUrl);
            parseMyType($html)

这段代码,但是这段代码中根本没有定义$html变量,但是竟然正常执行了,展现出了应该有的效果。

这是为什么?

我发现在这个函数中openPage(htmlUrl),定义了$html:

function openPage(htmlUrl) {
    $html = htmlUrl;

}


貌似难理解,其实好理解,变量是在,内存中,内存中,内存中。代码在执行的时候,是从内存中获取变量的,不是从代码中读取变量,而$html 这个变量在执行openPage函数的时候被创建了,所以执行  parseMyType($html)这个时候,从内存中就找到了$html这个变量。

一切看似顺理成章,但是转头一想,不对,变量不都是有自己的作用范围的吗?如for循环中的某个变量,出了for循环再去引用就报错了,即引用不到了,因为内存中已经删掉了。不然怎么会有局部变量、全局变量的概念。

难道是JavaScript的变量在内存中的创建和删除方式,和Java的变量创建和删除方式是不一样的吗?

难道JavaScript的变量,一旦被创建,就不会被删除吗?

亲测一下:

Java方式:



JavaScript方式:



最后发现,并没有弹出abc”,看来JavaScript的变量,其实和Java变量一样,不存在什么一旦被创建,就不会被删除的情况。


那么这个$html,究竟是哪儿来的呢?

答案是:

这个$html是一个全局变量。

---$html全局变量怎么定义的呢?


$html就是用上文“声明方式二”的这种方式。。。



版权声明:本文为博主原创文章,未经博主允许不得转载。

JS变量重复声明以及忽略var 声明的问题及其背后的原理

JS的容错率很高,一些其他语言常见的小错误JS都能大度得包容,比如给一个方法传入超出预计的参数、在声明变量之前使用该变量(变量的声明提升解决了这个问题)等等,这里我们就要解剖一下JS变量重复声明以及当...
  • SuperCoooooder
  • SuperCoooooder
  • 2016年10月09日 14:35
  • 3918

了解无阻塞加载javascript脚本技术

偶然间看到这样一篇博客,内容很详细,概念解释的也很通俗,转过来与大家分享一下,学习学习。 原文转自:http://ghdcblog.cn/article/%E4%BA%86%E8%A7%A3%E6%...
  • u010378313
  • u010378313
  • 2016年05月17日 14:44
  • 511

通过shell脚本删除代码里面定义但未使用的变量

对于大的工程尤其是测试工程,会有很多的编译告警,尤其是定义但未使用的变量,数量太多修改起来很费时,所以通过脚本解决。 首先:先将编译的日志保存下来  例如:gcc -o tets test.c >...
  • abc5382334
  • abc5382334
  • 2015年10月21日 17:29
  • 833

执行文件路径的变量:$PATH(PATH变量简介)

执行文件路径的变量:$PATH 在Linux中,PATH是环境变量,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行。 输入命令echo $PA...
  • lyc_daniel
  • lyc_daniel
  • 2013年10月11日 16:25
  • 3433

JavaScript

1、javaScript的概念:是一种表述语言,也是一种基于对象(Object)和事件驱动(EventDriven)的,安全性好的脚本语言,运行在客户端,从而减轻服务器端的负担,总结如下:   ...
  • m0_37412958
  • m0_37412958
  • 2017年11月24日 18:04
  • 541

深入理解JavaScript

关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel(写作) 和 张易江 Zhang Yi Jiang(设计)。 贡献者 C...
  • WenBin_Zhou
  • WenBin_Zhou
  • 2013年09月16日 17:15
  • 740

第三篇:VS2012中,调用opencv库,在程序中定义了变量,编译没有问题,运行时会报错“变量使用没有定义”

我在函数的初始化初始化了,但是开始可以运行,但是一段时间后会报错,使用的变量没有定义,错误截图 最后发现:程序在调用函数的时候,会使用该变量,我用该变量存了一个数,下一次调用的时候会使用,所...
  • liaojiacai
  • liaojiacai
  • 2015年07月23日 17:22
  • 979

javascript定义全局变量的时候有var和没有var的区别

首先讨论的范围是在浏览器端的javascript 在平常我们定义一个全局的变量 代码如下: var x = 2; y = 3; console.log(x); //2 consol...
  • qq_34986769
  • qq_34986769
  • 2016年08月09日 20:47
  • 1635

ES6--变量的声明及解构赋值

ES6的目标是使得JavaScript语言可以用来编写大型的复杂的应用程序,成为企业级开发语言;该标准已于2015年6月17日正式发布。但是真正的普及我认为还得需要一段时间,然而这并不是理由让我们不去...
  • ligang2585116
  • ligang2585116
  • 2017年02月11日 21:13
  • 3280

JavaScript深入理解函数参数列表及“不存在重载”

函数的参数JS和其他大多数语言一个较为明显的区别就在于函数参数的处理上。因为在JS中调用函数的时候,传入的参数数据类型是可以不固定的,个数也无所谓多少个。听起来很奇怪,实际上,JS中的参数在内部是用一...
  • a153375250
  • a153375250
  • 2016年04月03日 11:36
  • 1550
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript某行代码执行的时候,用到了某个变量,但是这个变量根本找不到在哪里定义了(或者说看上去根本没有定义过)是怎么回事,是怎么执行的?
举报原因:
原因补充:

(最多只允许输入30个字)