JS闭包怪异行为分析与Person函数的探究
需积分: 9 93 浏览量
更新于2024-11-18
收藏 2KB ZIP 举报
资源摘要信息:"Javascript Quirks by Tom Ballinger is a technical presentation focusing on the peculiarities and unexpected behaviors that can be encountered when working with Javascript. The talk delves into the intricacies of closures, a fundamental concept in Javascript that allows a function to access variables from an outer function that has already returned."
知识点详细说明:
1. 闭包的奇怪行为:
在Javascript中,闭包是一个函数和声明该函数的词法环境的组合。这意味着闭包允许一个函数访问并操作函数外部的变量。在演讲中提到的代码段展示了闭包的一个特殊行为,即循环中定义的函数如何引用循环变量。
```javascript
var arr = [];
for (var i = 0; i < 3; i++) {
var func = function() {
console.log(i);
}
arr.push(func);
}
arr[0]();
```
在这段代码中,尽管循环结束后`i`的值为3,但是当执行`arr[0]()`时,输出的`i`的值也是3。这是因为每个`func`函数都闭包了同一个`i`变量。当循环结束时,`i`的值不再改变,因此所有函数引用的都是同一个`i`。
2. `var`关键字的作用域问题:
另一个需要注意的是Javascript中的变量声明关键字`var`。变量用`var`声明时,它是函数作用域的,而不是块级作用域。这意味着如果`var`在循环或条件语句内部声明,那么该变量会被提升到函数或全局作用域的顶部。
```javascript
var Person = function(age) {
this.age = age;
}
tom = Person(25);
console.log(tom.age);
```
在这个例子中,`Person`函数内部使用`var`声明了局部变量`age`。由于`var`是函数作用域的,如果在全局作用域中定义`Person`函数,那么`age`变量也会在全局作用域中被声明。
3. 自己测试的重要性:
演讲者鼓励听众亲自运行这些代码,以更深刻地理解闭包和变量提升等概念的行为。实践是学习编程语言概念的一个关键部分,因为仅仅理解理论是不足以掌握这些复杂概念的。
4. HTML标签的含义:
标签“HTML”指出,尽管主题是Javascript,但演示内容很可能是通过HTML页面呈现的。这表明演示可能包含了交互式代码示例或脚本,以便观众可以即时看到结果。
5. 压缩包子文件的文件名称列表:
"last-rc-presentation-master"表明源代码或演示材料可能包含在一个名为“last-rc-presentation”的项目文件夹中,其中“master”表明这是一个主分支或主版本。这个文件夹可能包含了演讲所使用的HTML、CSS、Javascript文件以及其他资源文件。
总结来说,这些知识点涉及到Javascript编程中闭包和变量作用域的概念,以及如何通过实践来深化对这些概念的理解。同时,它们也展示了如何使用HTML和Javascript结合起来进行演示和教育。最后,文件名列表提示我们如何组织和管理代码和资源文件。
2021-10-07 上传
2021-05-27 上传
2023-02-22 上传
2021-02-20 上传
2023-06-07 上传
2023-07-11 上传
2021-05-26 上传
2021-05-26 上传
2021-05-24 上传
2023-05-15 上传
PeterLee龍羿學長
- 粉丝: 39
- 资源: 4633
最新资源
- WordPress作为新闻管理面板的实现指南
- NPC_Generator:使用Ruby打造的游戏角色生成器
- MATLAB实现变邻域搜索算法源码解析
- 探索C++并行编程:使用INTEL TBB的项目实践
- 玫枫跟打器:网页版五笔打字工具,提升macOS打字效率
- 萨尔塔·阿萨尔·希塔斯:SATINDER项目解析
- 掌握变邻域搜索算法:MATLAB代码实践
- saaraansh: 简化法律文档,打破语言障碍的智能应用
- 探索牛角交友盲盒系统:PHP开源交友平台的新选择
- 探索Nullfactory-SSRSExtensions: 强化SQL Server报告服务
- Lotide:一套JavaScript实用工具库的深度解析
- 利用Aurelia 2脚手架搭建新项目的快速指南
- 变邻域搜索算法Matlab实现教程
- 实战指南:构建高效ES+Redis+MySQL架构解决方案
- GitHub Pages入门模板快速启动指南
- NeonClock遗产版:包名更迭与应用更新