JS和函数式语言的三特性

JS和函数式语言的三特性,第1张

首先要有一个概念:并不是一个语言支持函数,这个语言就可以叫做“函数式语言”。函数式语言中的函数(function),除了能被调用之外,还具有一些其他性质。有以下三点:

1.

函数是运算

2.

在函数内保存数据

3.

函数内的运算对函数外无副作用

一、函数是运算元

普通的函数调用时,可以抽象的理解为:函数就是一个运算符,传入的参数是运算元;

但当JavaScript中的函数作为另一个函数的参数使用时,是传递引用的,这个“传入参数”就可以被理解为是一个运算元。由此的结论是,(作为“传入参数”的)函数具有运算元的含义,“函数参数”与普通参数并没有什么不同。

二、在函数内保存数据

在命令式语言中,函数内部的私有变量(局部变量)是不能被保存的。从程序的执行方式上来讲,局部变量在栈上分配,在函数执行结束后,所占用的栈被释放。因此函数内的数据不可能被保存。

在JavaScript的函数中,函数内的私有变量可以被修改,而且当再次“进入”到该函数内部时,这个被修改的状态仍将持续。下面的例子说明了这个特性:

复制代码

代码如下:

var

set,get

function

MyFunc(){

var

value

=

100

function

set_value(v){

value

=

v

}

function

get_value(){

return

value

}

set

=

set_value

get

=

get_value

}

MyFunc()

console.log(get())

//100

set(300)

console.log(get())

//300

第一种方法,利用闭包:

function addfun(){

 var buttonNodes = document.getElementsByTagName("input")

 for (var x = 0x <buttonNodes.lengthx++) {

    (function(x){

       buttonNodes[x].onclick=function(){

          alert(x)

       }

    })(x)

 }

}

第二种方法,利用自定义属性值:

function addfun(){

 var buttonNodes = document.getElementsByTagName("input")

 for (var x = 0x <buttonNodes.lengthx++) {

    buttonNodes[x].index=x

    buttonNodes[x].onclick=function(){

       alert(this.index)

    }

 }

}

第三种方法,利用ES6的新特性:

function addfun(){

 var buttonNodes = document.getElementsByTagName("input")

 for (let x = 0 x <buttonNodes.lengthx++) {

    buttonNodes[x].onclick=function(){

       alert(x)

    }

 }

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11600702.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存