教你如何使用firebug调试功能了解javascript闭包和this


Posted in Javascript onMarch 04, 2015

对于跟我一样,自学javascript且没有其他语言学习经验的人来说,一开始的时候,javascript的调试也是一个比较大的难点,很多基础的东西都需要自己去摸索,这个过程是非常苦闷的。

想着趁机会将上面那篇闭包博文的配图用firebug再来演示一遍,也算是一点调试经验分享。

示例代码如下:

function fn(){
var max = 10;

return function bar(x){

    if (x > max) {

    
console.log(x);

    }

}

}

var fl = fn(),

max = 100;

fl(15);

选择firebug——脚本

教你如何使用firebug调试功能了解javascript闭包和this

右侧监控栏可以window对象以及变量max、fl、fn。

同时下面也可以看到window的属性,以location为例,可以直接在“控制台”运行window.location输出,进一步可以window.location.href输出location的href属性值。当然,一般在引用window对象的属性和方法时,不需要用“window.xxx”这种形式,而直接使用“xxx”。

言归正传,

回到“脚本”栏,通过打“断点”的方式调试javascript和查看变量值。

有几个概念可以先了解下:断点、单步进入、单步跳过、单步退出。这里就不详叙了。

本次主要是采用设置断点、单步进入的方式。

可以在左侧行标处单击设置断点,断点右键可以正则判断。

可以设置多个断点,“断点”栏内可以删除已设置的断点。

这里就直接在script标签的开始处打断点并刷新页面。

此时

1、右边监控区域原window对象处变成this,并指向window。在“控制台”输出this.location会得到location一样的结果。

2、全局变量max、fl初始化为undefined

3、fn()是函数声明,因为解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问)

教你如何使用firebug调试功能了解javascript闭包和this

点击右上角的“单步进入”按钮

逐次执行代码并在监控区域查看this、各个变量的值变化以及堆栈的情况。可以和推荐的那篇博客相互参照来看。

然后再来一个this的例子
代码如下:

var name = 'The Window';

var obj = {

  name: 'The local',

  getNameFunc: function () {

    console.log(this.name);

    return function () {

      console.log(this.name);

    };

  }

};

var c = obj.getNameFunc();

c();

依然“单步进入”,可以看到在执行c()这行代码的时候,进入到getNameFunc里面,this从指向window对象变为obj,控制台输出‘The local'。

逐步执行可以非常清晰的看到整个代码的运行逻辑。

以上就是本文关于使用Firebug的调试功能了解javascript闭包和this的方法总结了,希望大家能够喜欢

Javascript 相关文章推荐
jQuery Ajax 实例全解析
Apr 20 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
Jan 09 Javascript
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
IE下JS读取xml文件示例代码
Aug 05 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
jQuery开源组件BootstrapValidator使用详解
Jun 29 jQuery
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
WebPack配置vue多页面的技巧
May 15 Javascript
分享一个vue项目“脚手架”项目的实现步骤
May 26 Javascript
javascript实现时间日期的格式化的方法汇总
Aug 06 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
Aug 07 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
Mar 04 #Javascript
jQuery插件开发的五种形态小结
Mar 04 #Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
Mar 04 #Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
Mar 03 #Javascript
jQuery实现复选框成对选择及对应取消的方法
Mar 03 #Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
Mar 03 #Javascript
JS实现文字放大效果的方法
Mar 03 #Javascript
You might like
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php单例模式实现方法分析
2015/03/14 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
vue一步步实现alert功能
2017/07/05 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
python万年历实现代码 含运行结果
2017/05/20 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
Python如何合并多个字典或映射
2020/07/24 Python
python如何随机生成高强度密码
2020/08/19 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
数据库方面面试题
2012/04/22 面试题
校庆接待方案
2014/03/18 职场文书
学习演讲稿范文
2014/05/10 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
实习护士自荐信
2015/03/25 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL