function, new function, new Function之间的区别

本文详细介绍了JavaScript中函数的四种使用方式,包括普通函数、匿名类、使用系统内置函数对象构建函数以及不常用的新函数构造函数方式。通过具体代码示例展示了每种方式的特点和运行结果。
函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系。 

    使用方法一: 
复制代码代码如下:

 var foo01 = function() //or fun01 = function()  
 {  
     var temp = 100;  
     this.temp = 200;  
     return temp + this.temp;  
 }  

 alert(typeof(foo01));  
 alert(foo01()); 
   运行结果: 
 function 
 300    最普通的function使用方式,定一个JavaScript函数。两种写法表现出来的运行效果完全相同,唯一的却别是后一种写法有较高的初始化优先级。在大扩号内的变量作用域中,this指代foo01的所有者,即window对象。 

    使用方法二: 
 
复制代码代码如下:

var foo02 = new function()  
 {  
     var temp = 100;  
     this.temp = 200;  
     return temp + this.temp;  
 }  

 alert(typeof(foo02));  
 alert(foo02.constructor());    
运行结果:  object 
 300    这是一个比较puzzle的function的使用方式,好像是定一个函数。但是实际上这是定一个JavaScript中的用户自定义对象,不过这里是个匿名类。这个用法和函数本身的使用基本没有任何关系,在大扩号中会构建一个变量作用域,this指代这个作用域本身。 

    使用方法三:  
复制代码代码如下:

var foo3 = new Function('var temp = 100; this.temp = 200; return temp + this.temp;');  

 alert(typeof(foo3));  
 alert(foo3());    
运行结果:  function 
 300    使用系统内置函数对象来构建一个函数,这和方法一中的第一种方式在效果和初始化优先级上都完全相同,就是函数体以字符串形式给出。 

    使用方法四: 
 
复制代码代码如下:

var foo4 = Function('var temp = 100; this.temp = 200; return temp + this.temp;');  

 alert(typeof(foo4));  
 alert(foo4());    
运行结果: 
function 
300    这个方式是不常使用的,效果和方法三一样,不过不清楚不用new来生成有没有什么副作用,这也体现了JavaScript一个最大的特性:灵活!能省就省。
### `function new` 与 `function void` 的区别 在 C++ 中,`function new` 并不是一个标准术语,但可以理解为涉及动态内存分配的函数行为,例如返回通过 `new` 操作符分配的对象指针。而 `function void` 通常指的是返回类型为 `void` 的函数,即不返回任何值。 #### `function void` 的定义与用途 一个返回类型为 `void` 的函数表示该函数不返回任何值。这种函数通常用于执行某些操作或修改对象的状态,而不是计算并返回结果。例如: ```cpp void printMessage() { std::cout << "Hello, World!" << std::endl; } ``` 调用此函数时,它会打印一条消息,但不会返回任何值。如果尝试将此类函数的结果赋值给变量,编译器会报错。这样的函数适用于不需要返回值的操作场景[^3]。 #### `function new` 的含义与使用示例 虽然 `function new` 不是一个正式的术语,但在实践中,它可能指代那些使用 `new` 操作符动态分配内存的函数。例如: ```cpp int* createInteger(int value) { int* ptr = new int(value); return ptr; } ``` 这个函数返回一个指向新分配的 `int` 对象的指针。调用者负责管理返回的内存资源,确保最终调用 `delete` 来释放内存。这种方式适用于需要动态创建对象的场景,提供了更大的灵活性,但也增加了内存管理的责任[^4]。 #### 区别总结 - **返回类型**:`function void` 表示函数不返回任何值,而 `function new` 通常返回一个指向动态分配内存的指针。 - **用途**:`function void` 用于执行操作而不返回结果,而 `function new` 用于动态创建对象,并返回其指针。 - **资源管理**:`function void` 不涉及资源管理问题,而 `function new` 需要调用者显式地释放分配的内存,否则可能导致内存泄漏。 ### 示例代码 以下是一个完整的示例,展示了两种函数的使用方式: ```cpp #include <iostream> void printMessage() { std::cout << "This is a void function." << std::endl; } int* createInteger(int value) { int* ptr = new int(value); return ptr; } int main() { printMessage(); int* number = createInteger(42); std::cout << "Value: " << *number << std::endl; delete number; // 释放动态分配的内存 return 0; } ``` 在这个例子中,`printMessage()` 是一个 `void` 函数,仅用于打印消息。而 `createInteger()` 使用 `new` 分配内存并返回指针,调用者必须手动释放该内存以避免泄漏[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值