(转)http://www.qianduan.net/use-the-chrome-developer-tools-to-learn-javascript.html
本文作者是Peter Rybin,Chrome开发者工具团队成员.
本文中,我们将通过使用Chrome的开发者工具,来学习JavaScript中的两个重要概念”闭包”和”内部属性”.
闭包
首先要讲的是闭包(closure) – JavaScript中最有名的东西之一.一个闭包就是一个使用了外部变量的函数.查看下面的例子:
1
2
3
4
5
6
7
8
9
|
function A(a, b, c) {
var ar = [a, b, c];
return function B(i) {
return ar[i];
};
}
var b = A('Here', 'I', 'am');
console.log( b(1) );
|
函数声明之后的第一条语句调用了函数A,函数A创建了一个值为数组[a,b,c]的局部变量ar,返回了一个函数B
(存储在了变量b中
),然后运行结束.
第二条语句调用了函数B
(b
),返回并打印出了数组ar.这就意味着A中的数组ar在
A结束执行后仍然存在
.但是它存储在什么地方呢?当然,在b上
!但是究竟是存在b的哪里呢?某个属性中?不是的.
这是JavaScript语言的一个核心特性:一个函数可以持有外层作用域的变量,并且除了调用该函数以外没有任何其他方法可以访问到这些变量.

从现在开始,chrome的开发者工具可以让闭包中的外部变量现形.在监控表达式(Watch Expressions)面板中查看函数实例b,展开它的属性后,
应该会有一个称为<function scope>的
子节点.所有被绑定的闭包变量都能在这里看到,这些变量就是在函数调用时可能会被用到的变量.
内部属性
开发者工具还能显示出另外一个东西,叫做内部属性(internal property).
假设你的代码中有个变量s,而且还执行了下面这样的操作
:
1
|
s.substring(1, 4) // 返回'ell'
|
你觉得s肯定是个字符串值吗? 这可不一定
.它也有可能是个字符串包装对象.尝试下面的监控表达式:
1
2
|
"hello"
Object("hello")
|
第一个表达式是一个普通的字符串字面量,第二个是一个功能完整(full-featured)的对象.令人费解的是,这两个值几乎有完全相同的表现.但是第二个表达式才真正的拥有自己的属性,并且你也可以在它身上添加自定义的属性.展开它的所有属性你会看到,它不是一个完全常规的对象:它有一个内部属性[[PrimitiveValue]] ,被包装的字符串值就存储在这个属性里面.你不能在JavaScript代码中访问到这个内部属性,但是你能在开发者工具的中看到它.

还有哪些值拥有内部属性?那就是绑定函数(bound function).绑定函数也算是一种包装对象,只不过被包装的是个函数.尝试执行下面的两条语句:
1
2
|
function Sum(a, b) { return a + b; }
var inc = Sum.bind(null, 1); // 将形参a绑定为1,this绑定为null
|
如果你把Sum和
inc放在监控表达式面板中对比一下,你会看到
,它们都是函数,但inc是一个不透明(non-transparent )的函数
:你看不到它的函数体内容,也不能看到它定义时的作用域.

这就是绑定函数的工作原理.在开发者工具中,你会看到[[TargetFunction]], [[BoundArgs]]以及[[BoundThis]]这三个内部属性.它们都表明了inc是一个绑定函数
,以及一些更具体的信息:inc绑定的目标函数是Sum
,绑定了一个参数1,绑定的this值是n
ull
.

原文:https://gist.github.com/4158604
分享到:
相关推荐
Chrome开发者工具是Google Chrome浏览器内置的一套强大的网页开发和调试工具,它为前端开发者提供了丰富的功能,包括元素检查、网络监控、源代码编辑、性能分析等。这份“Chrome开发者工具中文手册”旨在帮助用户...
学习前端开发的过程中,不仅要掌握基本的HTML、CSS、JavaScript知识,还要学会使用各种辅助工具来提高开发效率。Chrome开发者工具无疑是其中最重要的一款工具之一。建议初学者从基础开始逐步深入学习,同时积极参与...
这个"chrome-inspect离线开发者工具包@194530_@196351.rar"文件很可能包含了离线版本的Chrome开发者工具,这在没有网络连接或者需要在隔离环境中工作的场景下特别有用。 Chrome Inspect 主要由以下几个关键组件组成...
用于说明使用 Chrome 开发人员工具进行基本 Javascript 调试的基本单页应用程序。 克隆回购 CD 进入“DevTools”目录 对于开发,运行grunt serve 当你准备好构建你的项目时,运行grunt build 玩得开心!
### Chrome开发者版特点 1. **最新特性**:开发者版会首先包含谷歌即将推出的新功能和API,如WebAssembly、WebXR等新兴Web技术。 2. **持续更新**:开发者版每周或每两周更新一次,比稳定版更快,确保开发者能及时...
Chrome开发者工具是Google Chrome浏览器内置的一套用于网页和前端开发的调试工具,它允许开发者查看和修改页面的HTML、CSS和JavaScript代码,同时跟踪网络请求、性能分析和内存泄漏等信息。该工具的广泛使用,很大...
Chrome开发者工具是Google Chrome浏览器内置的一套网页制作和调试工具,对于前端工程师而言,它是深入理解页面工作原理、优化性能和调试问题的关键。这个模块主要关注页面的源头和网络数据的接收,这些信息都可以在...
Vue开发者工具是一款强大的Chrome浏览器扩展,专为Vue.js框架的开发者设计,用于增强对Vue应用的调试和分析能力。这个工具是由Vue的核心团队维护,并在持续更新中,以适应不断发展的Vue生态系统。在这个版本v6.1.4中...
在 Chrome 浏览器中,用户可以通过 F12 或者通过菜单→更多工具→开发者工具来打开开发者工具。在开发者工具中,用户可以看到浏览器缓存各种文件,包括 HTML、CSS、JavaScript、图片、视频等文件。 浏览和下载 har ...
它允许您在 Chrome 开发者工具中检查 React 组件层次结构。 您将在 Chrome DevTools 中看到两个新选项卡:“ Components”和“ Profiler”。 “组件”选项卡向您显示在页面上呈现的根 React 组件,以及它们最终...
由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿!
总之,DHC插件是Chrome开发者工具箱中的一个重要组成部分,尤其对于Web开发者和API测试人员来说,它提供了一个高效、便捷的API测试和开发环境,极大地提高了工作效率。通过使用DHC,用户可以更专注于他们的核心任务...
- `panel.html` 和 `main.html` 是React DevTools扩展的界面部分,分别代表了在Chrome开发者工具的不同面板显示的内容。 - `manifest.json` 是Chrome扩展程序的重要配置文件,它定义了扩展的元数据、权限和其他设置...
Chrome 浏览器内置的 JavaScript 调试工具,又称为 Chrome DevTools,是开发者们进行前端调试的重要利器。它提供了丰富的功能,包括代码编辑、性能分析、网络请求检查、内存泄漏检测等,使得开发者能高效地定位和...
总的来说,Chrome浏览器的Vue开发者工具是Vue.js开发者不可或缺的利器,它提供了直观、高效且强大的调试和分析能力,使得Vue应用的开发变得更加便捷和高效。无论你是初学者还是经验丰富的开发者,熟练掌握Vue ...
Chrome DevTools 是 Google Chrome 浏览器内置的一套强大的 Web 开发和调试工具,它允许开发者检查网页的结构、样式、网络请求、性能等各个方面,对网页进行实时修改并查看效果。Vue DevTools 就是基于 Chrome ...
ChromeTools正是一个专为最新版Google Chrome浏览器设计的工具集合,充分利用了JavaScript ES6的新特性,旨在帮助开发者更高效地处理浏览器环境下的各种任务,无论是在浏览器、辅助程序、扩展程序还是应用程序中。...
Vue.js devtools是针对Vue3开发的浏览器扩展插件,它是前端开发者不可或缺的工具,尤其对于Vue项目的调试和性能优化至关重要。...总的来说,Vue.js devtools是Vue开发者提高效率、提升开发体验的必备工具。