`

js函数名的疑惑

阅读更多
function a(b) {
    console.log(b)
    b = function c() {
        b = 2
        c = 3  
        console.log("b:change",b);
        console.log("c:",c);
    }
    console.log("b:before",b);
    b();
    b();
}

a(0)
 
     每一个函数都是Function类型的实例,函数是对象,函数名是一个指向函数对象的指针。此处是一个函数表达式,b=function c(){},对该函数的定义,引用的指针是保存在了b中,c仅仅是为了让函数体能够使用这个名字来引用自身。在b的这个函数体内,c是作为不可重写的local变量使用的,调用b()执行时b=2,b的引用被改变了,如果再次调用b();那么会报错b 不是一个function.
可以看下控制台打印结果:
0
b:before function c()
b:change 2
c: function c()
Uncaught TypeError: b is not a function
    总结:函数声明和函数表达式的函数名都是对函数的引用,这个引用可以改变;对于函数表达式中的可选函数名来说,在函数体内此函数名引用不可更改,并且只供该函数体调用自身使用。
0
2
分享到:
评论
2 楼 zhangzhaoaaa 2015-10-17  
baeiou 写道
这方面我很想多听听,你能不能多说一点

你想听什么?我们可以交流一下,互相学习
1 楼 baeiou 2015-10-17  
这方面我很想多听听,你能不能多说一点

相关推荐

    javascript 常用关键字列表集合

    在JavaScript中,关键字是一些具有特殊意义的单词,它们是语言语法的一部分,因此不能作为变量名或函数名使用。在实际开发过程中,如果不小心使用了关键字作为标识符,将导致编译错误,从而影响程序的正常运行。因此...

    新手学习js+css1教程

    3. **函数与变量**:JS支持函数定义和调用,以及变量声明(var、let、const)。 4. **控制流程**:包括条件语句(if...else)和循环结构(for、while)。 5. **对象与原型**:JS中的万物皆为对象,原型链机制则实现...

    理解Javascript_14_函数形式参数与arguments

    ### Javascript函数形式参数与arguments知识点解析 在JavaScript中,函数是一等公民,而形式参数(形参)和实际参数(实参)是函数执行过程中的关键概念。形式参数是在函数定义时指定的变量,用于接收函数调用时...

    大名鼎鼎SWFUpload- Flash+JS 上传

    JavaScript 库: SWFUpload.js Flash控制元素: SWFUpload_f8.swf 或者 SWFupload_f9.swf 事件处理 使用SWFUpload遇到的多数问题是由不正确地设置或者定义了糟糕的处理事件引起的。 初始化和设置 SWFpload必须在...

    走出JavaScript初学困境—js初学

    从描述中可以看出,作者强烈推荐了《JavaScript权威指南》这本书,因为这本书详细地介绍了JavaScript的各个方面,包括基本语法、对象、函数、DOM操作等,并且对各种浏览器之间的兼容性问题提供了解释和解决方案。...

    js replace() 文本替换你所不知的

    今天我在群里发这个函数的时候,有个人反映很快,说上面的那个正则写错了“/-(\w)/g”,而后很快又明白了,他的疑惑是这个“()”,其实这个括号是很必要的: (x)匹配x,将x保存在名为$1,$2…$9的变量

    用dwr技术显示页面数据加载状态.doc

    1. **请求前处理**:使用`DWREngine.setPreHook(jsfun)`可以在DWR调用之前执行一个预定义的JavaScript函数,如显示“正在加载数据..”的提示信息。这个函数没有参数,因此可以预先定义一个显示加载信息的函数,并在...

    弹出最简单的模式化遮罩层的js代码

    首先,我们从描述中了解到实现模式化遮罩层的方法有很多种,本文将介绍使用JavaScript(简称js)实现最简单的模式化遮罩层。为了实现这一功能,我们通常需要以下几个步骤: 1. **HTML结构**:首先,需要在HTML文档...

    非常实用的php弹出错误警告函数扩展性强

    在提供的代码示例中,定义了一个名为`alert()`的PHP函数,这个函数的主要作用是在浏览器中弹出一个警告框,并且可以将用户重定向到指定的URL页面。这个函数通过输出HTML和JavaScript代码实现跨浏览器的弹窗功能。 ...

    Eduroutes

    4. **函数**:JavaScript中的函数可以作为值传递,也可以作为对象,支持函数式编程风格。 5. **事件处理**:JavaScript常用于处理用户交互,如点击按钮、表单验证等,通过addEventListener方法添加事件监听器。 6. *...

    ajax file upload

    `ajaxfileupload.js`是实现Ajax上传功能的JavaScript插件,它扩展了jQuery的功能,提供了一套简单的API来调用Ajax文件上传。开发者可以通过调用这个插件提供的函数,如`$.ajaxFileUpload()`,来发起文件上传请求。这...

    js与ASP.NET 中文乱码问题

    在Web开发中,中文乱码是一个常见的问题,尤其是在JavaScript(简称JS)和ASP.NET的交互过程中。本文主要探讨两种情况:客户端到服务端的数据传输,以及服务端到客户端的数据回传。 1. **客户端到服务端的问题** ...

    Java JavaWeb 数据库等开发参考手册二

    这份压缩包包含了上述技术的详细参考资料,不仅有API的函数解释,可能还包括示例代码、使用场景和注意事项,这对于开发者理解和应用这些技术至关重要。无论你是初学者还是经验丰富的开发者,都能从中找到解决问题的...

    jquery.blockUI.js上传滚动等待效果实现思路及代码

    在给定的代码中,我们看到一个名为`request`的函数,它接受多个参数,如URL、回调函数、请求方法(GET或POST)、是否异步、以及是否显示遮罩层。这个函数使用了jQuery的`$.ajax`方法来发起HTTP请求。 1. `$.ajax`...

    learnyounode:LearnYouNode 为 Fullstack 工作

    首先,Node.js是基于Chrome V8引擎的JavaScript运行环境,允许开发者在服务器端使用JavaScript进行开发。LearnYouNode作为Node.js的入门教程,旨在帮助初学者快速掌握Node.js的基础知识,并将其应用于实际项目中。它...

    myPromise:一个Promise的简单实现,附超详细的注释,如果对各种then的链式操作有疑惑的,可以看看

    这个名为`myPromise`的项目是一个简单的Promise实现,它的目标是帮助开发者理解Promise的工作原理以及如何创建自定义的Promise。通过查看源代码并阅读其中的超详细注释,我们可以深入学习Promise的内部机制。 首先...

    JScript 语言参考(帮助文件)

    4. **函数**: 使用`function`关键字定义函数,如`function greet(name) { console.log("Hello, " + name); }`。 5. **数组**: JScript 提供了数组类型,可以使用`[]`来创建,如`var arr = [1, 2, 3];`。 6. **对象...

    buatzaqi:晕

    8. **Node.js**:JavaScript运行环境,允许在服务器端执行JavaScript。 9. **TypeScript**:JavaScript的超集,提供静态类型检查和更严格的语法。 10. **错误处理**:try...catch语句,以及如何有效地调试和报告...

    c语言盒子接球游戏源码.zip

    而当我们转向标签中的"JavaScript"和"3D"时,可能会产生一些疑惑。虽然本项目是用C语言实现的,标签中的"JavaScript"可能与项目本身关联不大,但可能反映出开发者同时拥有在Web开发领域的工作经验,或者暗示这个项目...

Global site tag (gtag.js) - Google Analytics