js的function和php的function,js中Function 类型有哪些

最有意思的函数有意思的根源在于- 函数也是对象,同样有拥有属性和方法。

由于函数是是对象,那么函数名也就相当于指向函数对象的指针

通常函数是由"函数声明"创建:1 function(sum1,sum2){

2 reutnr sum1 + sum2;

3 }也可以使用"函数表达式"创建:1 var sum = function(sum1,sum2){

2 return sum1+sum2;

3 };还有一种方式使用"构造函数"创建: (但不推荐)//这种方式,会导致两次解析代码,第一次解析常规的代码,第二次解析传入构造函数中的字符串。

1 var sum = new Function("sum1","sum2","return sum1+sum2")"函数声明"与"函数表达式"的区别在于:函数表达式没有函数名

函数表达式需要分号结尾

拥有多个函数名的函数上面提到,函数是对象,而函数名仅仅是执行函数对象的指针。

这代表着,通过将函数名赋值给其他变量,其他变量则也可以通过自身调用该函数。 注意: 访问函数对象指针时,则需要带小括号,如上面函数访问 sum 函数的指针

则需要将 sum 赋值给一个变量,该变量便可拥有指向同等函数的指针。eg: var sum1 = sum; // sum(); sum1(); 执行的结果相同强调: 使用 "函数名+()",代表着调用该函数, 不添加 "()",则代表访问该"指向该函数对象的指针"

将函数名设置为 null ,则可以使其指向的函数断绝联系。eg: sum = null; // sum(); 则会报错,提示sum不是一个函数, null代表着空对象指针

函数没有重载相同的函数名,后者会替换前者(函数声明或者函数表达式都是如此,这里以函数声明为例子)eg: function sum(sum1){ return sum1+ 100 }

function sum(sum2){ return sum2+ 200 }

sum(100); // 300;

函数声明与函数表达式的区别js解析器在对于这两者是由区别的。

函数声明的函数,在开始执行代码之前,就会通过函数声明提升的过程,读取并将函数声明添加到执行环境中。

即使函数在调用函数后面,也不会影响函数求值。

而函数表达式则不会,解析器必须执行到当前代码块才会被初始化并执行。如果调用在前,则

作为值的函数在JS中,函数名本身就是变量。所以函数也可以作为值来使用。

也就是说,不仅仅可以作为一个函数的参数,也可以作为一个函数的返回值。

而sort() 方法只能根据 tostring() 的值来排序eg: var data = [{name:'A',age:2},{name:'B',age:1}]

// 创建指定属性的函数

function setAttr(name){

return function(o1,o2){

var v1 = o1[name];

var v2 = o2[name];

if(v1 < v2) { return -1;

}

else if(v1 > v2) { return 1; }

else { return 0; }

}

}

//使用sort()方法调用

data.sort(setAttr('age')); // [{name,:'B',age:'1'},{name:'A',age:'2'}]

data.sort(setAttr('name')); // [{name:'A',age:'2'},{name,:'B',age:'1'}]

函数的属性每个函数都包含两个属性: length, prototype; length : 表示函数接收的参数个数。1 eg: funciont sum(test){} //sum.lenght == 1;prototype:在JS中,该属性是保存所有实例方法的真正所在。

在创建自定义引用类型以及实现继承时,该属性是非常重要的。prototype:属性是不可枚举的,因此不能使用for in发现。

通过构造函数的 prototype属性,创建的方法或者属性,都会被它的实例对象所继承,从而实现继承机制。

函数的方法每个函数都包含两个非继承而来的方法: apply() 与 call();

两者区别在于,第二个参数的不同。

该方法强大在于,可以扩充函数赖于运行的作用域。 apply(): 第一参数是在其中运行函数的作用域,另一个是参数数组。 call() : 第一参数是在其中运行函数的作用域,其他参数直接传递给函数,

也就是除第一个参数,其他都是逐个列举出来。

使用场景: 两者结果没有任何区别,而具体使用哪个,则取决于你传入的参数使用哪个方法方便。

如果传入参数是一个数组则使用 apply 更合适一点,否则 call() 更合适一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP 是一门后端语言,主要用于服务端编程,而 JavaScript 是一门前端语言,主要用于浏览器端编程。因此,PHP 和 JavaScript 的运行环境不同,它们不能直接互相调用。 如果需要在 PHP 执行 JavaScript 代码并传递值,可以使用一些工具或库来实现。例如,可以使用 V8 引擎将 JavaScript 代码编译为二进制文件,然后在 PHP 调用该文件来执行 JavaScript。或者可以使用一些 PHP 扩展,如 PHP-Javascript Bridge 或 phpv8 等,这些扩展可以在 PHP 直接执行 JavaScript 代码。 以下是一个使用 PHP-Javascript Bridge 执行 JavaScript 代码并传递值的示例: ```php // 引入 PHP-Javascript Bridge 库 require_once('/path/to/phpjsbridge.php'); // 创建一个 JavaScript 引擎实例 $js = new PhpJsBridge(); // 定义一个 JavaScript 函数 $jsCode = 'function add(a, b) { return a + b; }'; // 在 JavaScript 引擎执行该函数并传递参数 $result = $js->evaluate('add(' . $a . ', ' . $b . ')', $jsCode); // 输出结果 echo $result; ``` 在上面的示例,我们首先引入了 PHP-Javascript Bridge 库,然后创建了一个 JavaScript 引擎实例。接着,我们定义了一个 JavaScript 函数,并使用 `evaluate` 方法在 JavaScript 引擎执行该函数并传递参数。最后,我们输出了函数的返回值。 需要注意的是,在将 PHP 值传递给 JavaScript 代码时,需要将其转换为 JavaScript 对应的类型。例如,可以使用 `json_encode` 函数将 PHP 数组转换为 JSON 字符串,然后在 JavaScript 使用 `JSON.parse` 函数将其转换为 JavaScript 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值