- 浏览: 2160511 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (401)
- Agile (16)
- Apache Commons (3)
- Architecture (8)
- DB.MongoDB (5)
- DB.Mysql (3)
- DB.Oracle (34)
- DirectoryService (1)
- DotNet (1)
- English (3)
- Groovy (0)
- Html (28)
- Java (67)
- Java.Aixs (7)
- Java.Cache (2)
- Java.jPBM (1)
- Java.Resin (6)
- Java.Spring (4)
- Java.Struts2 (5)
- Java.Tomcat (16)
- Javascript (45)
- Javascript.Google Map (2)
- Javascript.Jquery (8)
- Life (15)
- Maven&Ant (4)
- Network (5)
- OS.Linux (45)
- OS.Windows (10)
- OS.Windows.Office (1)
- PlayFramework (15)
- Python (28)
- Reading notes (11)
- Security (13)
- Server.Apache (3)
- Server.Nginx (7)
- Test (6)
- Tool (15)
- Work.Solution (15)
- Other (20)
- SSO&CAS&Identity (13)
最新评论
-
hutuxiansheng123:
防火墙、Iptables、netfilter/iptables、NAT 概述 -
dacoolbaby:
非常棒的正则表达式,非常适用。万分感谢。
用python分析nginx的access日志 -
loot00:
您好! 我也遇到了相同的错误信息。我是用f_link_lob ...
LOB variable no longer valid after subsequent fetch -
feihangchen:
@OnApplicationStop public clas ...
Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务 -
洞渊龙王:
谢谢了
www.w3.org被qiang导致logback报错:Connect reset
参考:
functions-declarations-and-expressions
在Javascript中,函数象变量一样可以在任何地方被定义。
Javascript中定义函数有如下3种方式:
函数声明语法:注意,函数声明的时候,后面不需要跟分号来和其他代码分隔开来。
函数声明的名字在函数内部和函数所在的parent的内部可见!
函数声明在预执行期(即在浏览器准备执行代码的时候、正式执行代码之前)被解析。因此,使用函数声明方式定义的函数,即可以在声明之前调用,也可以在声明之后调用。如下
函数可以在代码的任何地方被声明:看如下列子
试着在不同的浏览器执行上述代码,在FirefoxF14中,执行上述代码无反应。其他浏览器返回2。
这是因为函数声明是在执行前被解析。根据规范(p.10.5),后面的具有相同名字的函数声明 覆盖前面已经存在的函数声明。
当到执行期的时候,这些声明代码被忽略。因此if判断其实本身不影响什么东西。
函数表达式语法:
函数在Javascript中是一等公民,象数字、字符串一样。任何你可以放置值的地方,你也可以放置一个函数。
函数表达式就是:任何包含函数function(arguments) { ... }的表达式。注意:如下表达式声明的最后跟着双引号分隔符。如果在函数表达式中的function也有自己的名字,那么这个名字只在函数内部可见:参考NFE(Named function expressions)被命名的函数表达式
函数表达式语法例子1:
函数表达式语法例子2:创建匿名函数、同时执行被创建的匿名函数
为什么函数在方括号里面:因为Javascript只允许函数表达式在这里被执行。
怎么区分:函数声明、函数表达式
当Javascript在主代码流中解析函数时,这是函数声明。否则,当函数作为statement的一部分时,就是函数表达式。
当Javascript的执行流到达时,函数表达式才会被创建。因此,函数表达式只能在声明之后使用。
建议:尽量使用函数声明而不是函数表达式。函数表达式只在需要的时候才使用:如使用条件函数定义
函数声明和函数表达式都是定义一个变量,然后把一个函数放进去。不同的是他们的创建时间:函数声明在预执行期,函数表达式在执行期。
第三种定义函数的方式:使用new Function,如下,很少使用这种方式。
NFE(Named function expressions)被命名的函数表达式:如下的函数表达式,就包含自己的名字
上面的语法就被叫做NFE(被命名的函数表达式)。在支持这种语法的浏览器中,function声明的名字只在函数内部可见。如下:Firefox14中,sayHi1的名字在函数外面调用不到!IE8可以!
NFE一般被用在递归调用的地方。
functions-declarations-and-expressions
在Javascript中,函数象变量一样可以在任何地方被定义。
Javascript中定义函数有如下3种方式:
- 1,函数声明
- 2,函数表达式
- 3,调用new Function的返回结果
函数声明语法:注意,函数声明的时候,后面不需要跟分号来和其他代码分隔开来。
function Identifier ( FormalParameterListopt ) { FunctionBody } // 其他的像for循环、if判断的大括号后面,也都没有分号。 for (variable=startvalue;variable<endvalue;variable=variable+increment) { code to be executed } if (condition) { code to be executed if condition is true } else { code to be executed if condition is not true }
函数声明的名字在函数内部和函数所在的parent的内部可见!
函数声明在预执行期(即在浏览器准备执行代码的时候、正式执行代码之前)被解析。因此,使用函数声明方式定义的函数,即可以在声明之前调用,也可以在声明之后调用。如下
// 能正常工作 function sayHi(name) { alert("Hi, "+name) } sayHi("John"); // 也能正常工作 sayHi("John"); function sayHi(name) { alert("Hi, "+name) }
函数可以在代码的任何地方被声明:看如下列子
sayHi(); if (1) { function sayHi() { alert(1) } } else { function sayHi() { alert(2) } // <-- }
试着在不同的浏览器执行上述代码,在FirefoxF14中,执行上述代码无反应。其他浏览器返回2。
这是因为函数声明是在执行前被解析。根据规范(p.10.5),后面的具有相同名字的函数声明 覆盖前面已经存在的函数声明。
当到执行期的时候,这些声明代码被忽略。因此if判断其实本身不影响什么东西。
函数表达式语法:
函数在Javascript中是一等公民,象数字、字符串一样。任何你可以放置值的地方,你也可以放置一个函数。
函数表达式就是:任何包含函数function(arguments) { ... }的表达式。注意:如下表达式声明的最后跟着双引号分隔符。如果在函数表达式中的function也有自己的名字,那么这个名字只在函数内部可见:参考NFE(Named function expressions)被命名的函数表达式
函数表达式语法例子1:
var f = function(arguments) { ... code ... };
函数表达式语法例子2:创建匿名函数、同时执行被创建的匿名函数
为什么函数在方括号里面:因为Javascript只允许函数表达式在这里被执行。
(function() { var a, b // local variables // ... // and the code })();
怎么区分:函数声明、函数表达式
当Javascript在主代码流中解析函数时,这是函数声明。否则,当函数作为statement的一部分时,就是函数表达式。
当Javascript的执行流到达时,函数表达式才会被创建。因此,函数表达式只能在声明之后使用。
var sayHi; // sayHi(); <-- 不能在这里调用sayHi函数,因此此时,sayHi还不存在。 if (1) { sayHi = function() { alert(1) }; } else { sayHi = function() { alert(2) }; } sayHi();
建议:尽量使用函数声明而不是函数表达式。函数表达式只在需要的时候才使用:如使用条件函数定义
- 1,函数声明可读性更加好,代码更加简短
- 2,函数声明能在声明之前被调用
函数声明和函数表达式都是定义一个变量,然后把一个函数放进去。不同的是他们的创建时间:函数声明在预执行期,函数表达式在执行期。
第三种定义函数的方式:使用new Function,如下,很少使用这种方式。
var sayHi = new Function('name', ' alert("Hi, "+name) '); sayHi("Benedict");
NFE(Named function expressions)被命名的函数表达式:如下的函数表达式,就包含自己的名字
var f = function sayHi(name) { alert("Hi, "+name) };
上面的语法就被叫做NFE(被命名的函数表达式)。在支持这种语法的浏览器中,function声明的名字只在函数内部可见。如下:Firefox14中,sayHi1的名字在函数外面调用不到!IE8可以!
var f = function sayHi(name) { alert(sayHi); }; f(1); sayHi(1);
NFE一般被用在递归调用的地方。
发表评论
-
knockoutjs 变量引用方式、怪异问题排查
2012-08-24 15:01 1538问题:使用knockoutjs的过程中,有时候会发现一些奇怪的 ... -
Javascript Closures闭包、为什么要闭包(闭包作用)、变量作用域
2012-08-10 14:00 2123转自:http://www.jb51.net/article/ ... -
Javascript函数、变量的初始化顺序、Javascript上下文环境
2012-08-07 15:57 1856参考:Initialization of functions ... -
Javascript alert object、JavaScript版本迷局
2012-07-30 15:18 24721,使用alert(object.toSource()) 注 ... -
knockoutjs -- if 绑定
2012-06-14 16:22 13032参考:http://knockoutjs.com/ ... -
jquery Fixture 插件
2012-06-07 10:16 1511jQuery.Fixture插件是一个包含在javascrip ... -
CoffeeScript
2012-04-20 15:05 1820CoffeeScript是一个被编译成javascript的小 ... -
javascriptmvc 3.2.2
2012-04-19 17:10 1362JavaScriptMVC是一个以MIT协议开源的Javasc ... -
knockoutjs -- all built-in buildings
2012-04-16 16:12 1003所有可用的binding值 文字和显示:visible, t ... -
knockoutjs -- applyBinding & Observables
2012-04-16 15:35 4496applyBindings ko.applyBindings( ... -
knockoutjs -- load save data(与服务器进行数据交互) & binding绑定
2012-04-10 15:51 6054和服务器交互数据: Knockout 是一纯javascrip ... -
使用ajax和history.pushState无刷新改变页面URL onpopstate(转)
2012-04-10 13:20 11559var htmlData1 = $.ajax( ... -
knockoutjs 单页引用 客户端重定向(location.hash history.pushState)
2012-04-10 10:33 4397大部分现代的,相应的 ... -
knockoutjs foreach array绑定 表格 下拉框绑定
2012-04-09 16:04 11462动态表格使用observable arrays and the ... -
knockoutjs 静动态数据、行为绑定,计算属性及Sync同步更新 Value值更新事件控制
2012-04-09 15:24 9514data-bind="text: firstName ... -
knockoutjs -- 使用Model-View-ViewModel (MVVM) 模式简化动态Javascript UI
2012-04-09 14:35 3812Knockout 是个JavaScript library,帮 ... -
jquery-validation-1.9.0
2012-04-07 15:52 4313jQuery验证插件: 简单高 ... -
textarea文本框限制输入文本数量(Firefox,Chrome,Safari)、Javascript取得字符ASCII码值、常见字符ASCII码值
2012-04-07 10:35 2269// focus用来对应Chrome浏览器往文本框拖入值 ... -
JavaScript高级程序设计读书笔记-事件
2011-11-09 16:53 1488JavaScript和HTML之间的交互是通过用户和浏览器操作 ... -
JavaScript高级程序设计读书笔记-浏览器中的JavaScript&DOM基础
2011-11-09 14:52 944HTML中的JavaScript: <scr ...
相关推荐
**命名函数表达式**(Named Function Expression, NFE)是函数表达式的一个特殊情况,即使在函数表达式中给出了一个名字,如`var bar = function foo() {}`。这个名字`foo`只在函数体内部可用,外部无法访问,因此...
- 在编写代码时避免使用命名函数表达式,除非确保其标识符不会被错误地访问。 - 如果必须使用命名函数表达式,建议在内部使用,避免造成作用域污染。 ##### 实例2:有名函数表达式被当作函数声明和函数表达式处理 `...
- **有名函数表达式**(NFE): ```javascript var add = function foo(a, b) { // do something }; ``` ##### 声明与表达式的区别 - **提升行为**:只有函数声明会被提升。 - **可读性**:函数声明通常更易于...
命名函数表达式(Named Function Expression,NFE)是函数表达式的一种特例,它有一个名字,但这个名称的作用域仅限于函数内部。这意味着函数外部无法通过名称访问该函数,只能通过变量来调用。命名函数表达式的好处...
函数声明具有函数名,而函数表达式可以没有函数名或者使用命名函数表达式(NFE)。 ```javascript // 函数声明 function add(a, b) { // ... } // 匿名函数表达式 var add = function(a, b) { // ... }; // ...
如果函数表达式包含名称,则它被称为命名函数表达式(Named Function Expression, NFE)。在JavaScript 1.2及更高版本中,引入了函数文本的概念,它允许我们通过函数表达式定义函数。 对于函数文本或命名函数表达式...
该章节深入探讨了JavaScript中的命名函数表达式(Named Function Expression, NFE)。NFE 是一种特殊的函数表达式形式,它允许函数自身有一个名称,这在调试和递归调用时非常有用。 - **命名函数表达式的定义与用法...
命名函数表达式(Named Function Expression, NFE)是一个特殊的函数表达式,其中函数有一个内部名称。然而,这个名称仅在函数体内部可见,非IE浏览器中外部不可见。因此,以下代码在非IE浏览器中会导致错误: ```...
JavaScript中的NFE,全称为Named Function Expressions(命名函数表达式),是JavaScript中定义函数的一种方式,它与Function Declaration(函数声明)有所不同。NFE的主要特点是它的匿名性和可命名性,这种特性使得...