JS闭包怪异行为分析与Person函数的探究

需积分: 9 0 下载量 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结合起来进行演示和教育。最后,文件名列表提示我们如何组织和管理代码和资源文件。

INSERT INTO ""("id", "user_name", "real_name", "email", "org_id", "last_login_time", "created_time", "valid_period", "always", "name", "lock_status", "latest_failed_time", "wrong_pwd_time") VALUES (575526910805672420, '13330291922', '袁和姣', 'nancy.yy@foxmail.com', 454544777304604693, '2023-05-17 15:25:19', '2023-05-08 11:38:28.304166', '2023-05-08 11:38:28.304166', 't', '漏扫专员', 0, NULL, 0); INSERT INTO ""("id", "user_name", "real_name", "email", "org_id", "last_login_time", "created_time", "valid_period", "always", "name", "lock_status", "latest_failed_time", "wrong_pwd_time") VALUES (575526910805672420, '13330291922', '袁和姣', 'nancy.yy@foxmail.com', 454544777304604693, '2023-05-17 15:25:19', '2023-05-08 11:38:28.304166', '2023-05-08 11:38:28.304166', 't', '成员', 0, NULL, 0); INSERT INTO ""("id", "user_name", "real_name", "email", "org_id", "last_login_time", "created_time", "valid_period", "always", "name", "lock_status", "latest_failed_time", "wrong_pwd_time") VALUES (575526910805672420, '13330291922', '袁和姣', 'nancy.yy@foxmail.com', 454544777304604693, '2023-05-17 15:25:19', '2023-05-08 11:38:28.304166', '2023-05-08 11:38:28.304166', 't', '单位接口人', 0, NULL, 0); 这三条语句是数据库temp中数据, 用sql查询数据库的数据,查询结果要求是这样的额 (575526910805672420, '13330291922', '袁和姣', 'nancy.yy@foxmail.com', 454544777304604693, '2023-05-17 15:25:19', '2023-05-08 11:38:28.304166', '2023-05-08 11:38:28.304166', 't', '漏扫专员,成员,单位接口人', 0, NULL, 0);

2023-06-07 上传