怎么js理解函数实例

JavaScript010

怎么js理解函数实例,第1张

js的函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。如下为其按键驱动时间的一个简单示例

<!DOCTYPE html>

<html>

<head>

<script>

function myFunction()

{

alert("Hello World!")

}

</script>

</head>

<body>

<button onclick="myFunction()">点击这里</button>

</body>

</html>

1、JavaScript 函数语法

函数就是包裹在花括号中的代码块,前面使用了关键词 function:

function functionname()

{

这里是要执行的代码

}

当调用该函数时,会执行函数内的代码。

可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。

提示:JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。

2、调用带参数的函数

在调用函数时,您可以向其传递值,这些值被称为参数。

这些参数可以在函数中使用。

您可以发送任意多的参数,由逗号 (,) 分隔:

myFunction(argument1,argument2)

当您声明函数时,请把参数作为变量来声明:

function myFunction(var1,var2)

{

这里是要执行的代码

}

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

实例

<button onclick="myFunction('Bill Gates','CEO')">点击这里</button>

<script>

function myFunction(name,job)

{

alert("Welcome " + name + ", the " + job)

}

</script>

上面的函数会当按钮被点击时提示 "Welcome Bill Gates, the CEO"。

函数很灵活,您可以使用不同的参数来调用该函数,这样就会给出不同的消息:

实例

<button onclick="myFunction('Harry Potter','Wizard')">点击这里</button>

<button onclick="myFunction('Bob','Builder')">点击这里</button>

根据您点击的不同的按钮,上面的例子会提示 "Welcome Harry Potter, the Wizard" 或 "Welcome Bob, the Builder"。

3、带有返回值的函数

有时,我们会希望函数将值返回调用它的地方。

通过使用 return 语句就可以实现。

在使用 return 语句时,函数会停止执行,并返回指定的值。

语法

function myFunction()

{

var x=5

return x

}

上面的函数会返回值 5。

注释:整个 JavaScript 并不会停止执行,仅仅是函数。JavaScript 将继续执行代码,从调用函数的地方。

函数调用将被返回值取代:

var myVar=myFunction()

myVar 变量的值是 5,也就是函数 "myFunction()" 所返回的值。

即使不把它保存为变量,您也可以使用返回值:

document.getElementById("demo").innerHTML=myFunction()

"demo" 元素的 innerHTML 将成为 5,也就是函数 "myFunction()" 所返回的值。

您可以使返回值基于传递到函数中的参数:

实例

计算两个数字的乘积,并返回结果:

function myFunction(a,b)

{

return a*b

}

document.getElementById("demo").innerHTML=myFunction(4,3)

"demo" 元素的 innerHTML 将是:

12

在您仅仅希望退出函数时 ,也可使用 return 语句。返回值是可选的:

function myFunction(a,b)

{

if (a>b)

{

return

}

x=a+b

}

如果 a 大于 b,则上面的代码将退出函数,并不会计算 a 和 b 的总和。

6、局部 JavaScript 变量

在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。

您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。

只要函数运行完毕,本地变量就会被删除。

7、全局 JavaScript 变量

在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

8、JavaScript 变量的生存期

JavaScript 变量的生命期从它们被声明的时间开始。

局部变量会在函数运行以后被删除。

全局变量会在页面关闭后被删除。

9、向未声明的 JavaScript 变量来分配值

如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明。

这条语句:

carname="Volvo"

将声明一个全局变量 carname,即使它在函数内执行。

逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:

正常的表达式 逆波兰表达式

a+b --->a,b,+

a+(b-c) --->a,b,c,-,+

a+(b-c)d --->a,d,b,c,-,,+

a=1+3 --->a=1,3 +

http=(smtp+http+telnet)/1024 写成什么呢?

http=smtp,http,telnet,+,+,1024,/

逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)(c+d)转换为ab+cd+

它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算。其运算方式如下:

如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。

将一个普通的中序表达式转换为逆波兰表达式的一般算法是:

(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。

(2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。

(3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。

(4)如果不是数字,该字符则是运算符,此时需比较优先关系。

做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将栈顶的运算符从栈中弹出,直到栈顶运算符的优先级低于当前运算符,将该字符入栈。

(5)重复上述操作(3)-(4)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。

下面是程序化算法流程:

1、建立运算符栈stackOperator用于运算符的存储,压入'\0'。

2、预处理表达式,正、负号前加0(如果一个加号(减号)出现在最前面或左括号后面,则该加号(减号)为正负号) 。

3、顺序扫描表达式,如果当前字符是数字(优先级为0的符号),则直接输出该数字;如果当前字符为运算符或括号(优先级不为0的符号),则判断第4点 。

4、若当前运算符为'(',直接入栈;

若为')',出栈并顺序输出运算符直到遇到第一个'(',遇到的第一个'('出栈但不输出;

若为其它,比较stackOperator栈顶元素与当前元素的优先级:

如果 栈顶元素 >= 当前元素,出栈并顺序输出运算符直到 栈顶元素 <当前元素,然后当前元素入栈;

如果 栈顶元素 <当前元素,直接入栈。

5、重复第3点直到表达式扫描完毕。

6、顺序出栈并输出运算符直到栈顶元素为'\0'。

各运算符及符号优先级:

'\0': -1

')': 1

'(': 2

'+'、'-': 3

'*'、'/'、'%': 4

'^': 5

其它: 0

/**

* 计算逆波兰表达式的值

*/

function calculate(RPolishArray){

var result = 0

var tempArray = new Array(100)

var tempNum = -1

for(i = 0i <RPolishArray.lengthi++){

if(RPolishArray[i].match(/\d/)){

tempNum++

tempArray[tempNum] = RPolishArray[i]

}else{

switch(RPolishArray[i]){

case '+':

result = (tempArray[tempNum-1] *1) + (tempArray[tempNum] * 1)

tempNum--

tempArray[tempNum] = result

break

case '-':

result = (tempArray[tempNum-1] *1) - (tempArray[tempNum] * 1)

tempNum--

tempArray[tempNum] = result

break

case '*':

result = (tempArray[tempNum-1] *1) * (tempArray[tempNum] * 1)

tempNum--

对项目性能没有形象,也不会影响运行速度。注释过多只会增加文档的体积。但不会影响太多。

最需要注意一点是:不用的js程序代码段不要注释掉就完事,更不要保留以备以后用而是直接删掉。

无论什么语言写程序都要注意这一点。因为会被别人利用,而制造麻烦。可能造成对于你的系统入侵和破坏