javascript 命名函数表达式 - 范围可访问性[重复]

2024-02-16

我正在跟进John Resig 的 JS 忍者秘密幻灯片 http://ejohn.org/apps/learn/#11我发现了一些我不太明白的东西。下面的代码定义了一个命名函数表达式:

var ninja = function myNinja(){
  console.log(myNinja); // function myNinja() {...}
};
myNinja; // undefined

正如我所看到的,在当前范围内(假设它是全局的),ninja是保存对命名函数的引用的变量myNinja. ninja变量可以在范围内访问 - 这很清楚,但是myNinja在作用域中不可访问(但可以在其自己的函数内访问)。怎么会?

如果我定义一个函数(不使用函数表达式,而是使用函数声明):

function Cheese() {
  console.log(Cheese);
}

那么它就可以在当前范围内访问。我知道这就是这样的 - 但有人可以解释为什么会这样吗?


在他的书中,JavaScript 忍者的秘密 http://www.manning.com/resig/,John Resig 对这个概念做了精彩的解释。

http://jsninja.com/ http://jsninja.com/

以下是书中的引述:

4.2.4.内联命名函数

 <script type="text/javascript">
  var ninja = function myNinja(){ 
      assert(ninja == myNinja, "this is named two things at once!"); 
  };
  ninja(); 
  assert(typeof myNinja == "undefined",
    "But myNinja isn't defined outside of the function."); 
 </script>

这个清单提出了有关内联的最重要的一点 函数:尽管可以命名内联函数,但这些名称是 仅在函数本身内可见。

还记得我们在第 3 章中讨论过的范围规则吗?排队 函数名的作用有点像变量名,它们的范围是 仅限于声明它们的函数。

3.2.1.范围和功能

变量声明从其声明点起就处于范围内到 声明它们的函数的末尾, 不管 块嵌套。

如果你想更多地了解这个概念,这本书会对你有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript 命名函数表达式 - 范围可访问性[重复] 的相关文章

  • Angular UI 模式的范围问题

    我无法理解 使用角度 UI 模式的范围 虽然这里不是很明显 但我已经正确设置了模块和所有内容 据我所知 但这些代码示例尤其是我发现错误的地方 index html 其中重要部分 div class btn group div
  • 使用本地存储在从另一个表保存的 HTML TABLE 中打印 JSON,以便我在另一个页面上打印我的表

    在我的作业中 我必须使用用户输入中的数据并将数据保存在本地存储中 我必须以水平表格式将这些数据从本地存储打印到其他页面 为此 我编写了用于用户输入并将数据保存在本地存储中的代码 div p p div
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • jQuery .push 到 .get 调用中的数组给出空结果

    谁能告诉我为什么下面给我一个空字符串 当我console log contentArray in the get 回调函数它显示数据 但是当我尝试在下面的代码中执行它时 结果为空 sectionArray contentArray func
  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • 通过 JavaScript 获取表单名称

    我有一个简单的问题 但我在网上找不到好的解决方案 我有这个 HTML 代码
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • 当更改视图的模型时,是替换模型更好还是创建新视图更好?

    我的 Backbone 应用程序中有一个电子邮件视图 它目前在中实例化view我的控制器的动作 它有点像这样 routes email id email email function id var email new Email id id
  • Android 嵌入式网络服务器

    我想在我的 Android 应用程序中嵌入一个网络服务器 连接到它的设备将具有两种功能 一个是发送一个 xml 文件 我可以解析该文件并执行一些操作 另一个是能够从我的 SD 卡下载文件 我找到了 nanoHTTPD 和 AndroidHT
  • Linux 上的 mysql2 gem 安装

    我正在尝试在 Linux 上安装 gem 但它给了我一个错误 An error occured while installing mysql2 0 3 11 and Bundler cannot continue Make sure tha
  • Rails 中是否可以有复合外键?

    假设以下数据模式 Usage client id resource type amount Billing client id usage resource usage type rate 在此示例中 假设我有多个资源 每个资源都可以通过多
  • Python json.loads 改变对象的顺序

    我有一个包含 JSON 对象的文件 它是通过以下方式加载的 with open data json r as input file input data input file read 此时 input data 仅包含一个字符串 现在我继
  • Grails 3:外部 Logback.groovy 文件

    我正在尝试将我的logback groovy通过在 my 中设置路径来设置文件build gradlebootrun 闭包中的文件 bootRun if Environment currentEnvironment Environment
  • 浮动创建重叠的 Div

    我有两个 div 一个在另一个里面 当我将里面的一个浮动到 左 时遇到了一些问题 问题是外部 div 不会扩展其高度以适应内部 div 内部的文本 由于这可能非常令人困惑 因此我将尝试用一些代码来解释它 HTML div Inner Div
  • gprof 命令未创建正确的 out.txt

    首先 我运行的是 MacOSX 10 7 1 我已经正确安装了 Xcode 4 和所有库 以便使用 C 语言 我在 shell 中运行 gprof 命令时遇到问题 我将逐步解释我正在做的事情以及我收到的输出 Step 1 roger cd
  • 如何为 if 和 while 语句编写简单的解析器? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要编写一个简单的解析器 将标记转
  • 无法获取 BatchedBridge,请确保您的捆绑包正确打包

    我在 Android 中使用 React Native 时遇到问题 无法获取 BatchedBridge 请确保您的捆绑包正确打包 在此处输入图像描述 1 1 我尝试了一切 将 npm react native react 和 packag
  • Oracle Entity Framework 提供程序不存储包含毫秒的 DateTime.Now

    我基本上和这个人有完全相同的问题 为什么我无法使用实体框架保存当前的 DateTime Now https stackoverflow com questions 18557546 why i cant save the current d
  • R 中的点计数

    假设我从 40 个 x y 对创建以下图片 现在给出黑色的附加点 我希望能够计算出有多少点落在蓝色区域内 有多少点落在蓝色区域之外 以一种非常有效的方式 因为我将在一个昂贵的循环中多次执行此操作 为了说明我正在寻找的内容 请考虑下图 所以正
  • SignalR:如何停止在页面重新加载时创建新连接

    您好 我正在开发一个聊天应用程序以及应用程序中的一些其他页面 一旦我登录 我就会维护用户的会话 我的主要目的是 每当其他用户连接到服务器时 用户应该收到通知 我面临的问题是每当我导航到应用程序中的其他页面时 连接就会丢失 如何停止此行为并继
  • 子类中抛出异常的标准是什么

    到目前为止我所知道的是 子类如果重写超类方法应该抛出相同的异常或异常的子类 例如 这是对的 class SuperClass public int doIt String str Integer data throws ArrayIndex
  • 在 Rails 模型中编写大型 SQL 的更好方法?

    使用了很多之后Arel that Rails提供糖代码 我遇到问题时 处理大型且复杂的 SQL 查询 但我无法很好地处理Arel方法 我喜欢Arel对于小事情 但是当事情变得混乱时 我更喜欢将代码分开 那么 对于我应该如何治疗我的大 有什么
  • ES2015/2016 'typeof varName === 'undefined` 的方式?

    我现在正沉迷于 ES2015 的豪华体验中 有几个项目 我想知道我是否可以摆脱令人讨厌的拐杖来检查undefined在新仙境里 有没有更短但仍然准确的方法typeof varName undefined ES2015 已经有了 我当然可以使
  • 当您在浏览器中输入 URL 时会发生什么[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有人可以告诉我 从我在浏览器中输入 URL 到我在浏览器上看到该页面 幕后发生了什么 详细说明该过程将会有很大帮助 注意 这是一个非常粗糙和过于简单化
  • Boost Log 更改默认logging::core 格式化程序?

    我正在使用 Boost v1 54 我想简单地更改logging core的默认接收器格式 但还没有找到方法 在里面日志记录格式 http www boost org doc libs 1 54 0 libs log doc html lo
  • 嵌套异常是 java.sql.SQLException:无法为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序 - Spring MVC JNDI 问题

    我正在开发 SpringMvcJndiDataSourceXML 示例 在此示例中 我面临以下错误 我找到了很多链接 但没有一个对我有用 虽然这是重复的问题 但我仍然想得到以下问题的答案 请指导 org springframework jd
  • javascript 命名函数表达式 - 范围可访问性[重复]

    这个问题在这里已经有答案了 我正在跟进John Resig 的 JS 忍者秘密幻灯片 http ejohn org apps learn 11我发现了一些我不太明白的东西 下面的代码定义了一个命名函数表达式 var ninja functi