<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function box(num1,num2){
return num1+num2; //普通函数声明方式
}
alert(box(1,2));

var box=function(num1,num2){
return num1+num2; //使用变量初始化函数
}
alert(box(1,2));

var box=new Function('num1','num2','return num1+num2');
alert(box(1,2)); //使用new的构造函数来声明


//函数可以传递函数


//下面的例子很普通,不是作为函数来传递的,而是作为函数的返回值来传递的
function box(sum,num){
return sum+num;
}
function sum(num){
return num+10;
}

var result=box(sum(10),10); //sum(10)这里传递的是函数的返回值,和普通的变量一样,没区别
alert(result);//30


//要把函数本身作为参数传递,而不是函数的结果
function box(sum,num){
return sum(num);
}
function sum(num){
return num+10;
}
var result=box(sum,10);//这个sum是一个函数,当作参数传递到另一个函数里,而不是函数的返回值。
alert(return);//20

function box(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);//4*3*2*1=24阶乘,递归
} //使用callee调用自身,实现递归
}
alert(box(4));

var color="红色的"; //这里color就是全局变量,而这个变量又是window的属性

var box={
color:"蓝色的",
sayColor:function(){
alert(this.color); //这里的color是box下得属性,也就是局部变量
//这里this,我们确定是代表的box对象
}
}
alert(this.color); //红色的
box.sayColor(); //蓝色的


function box(name,age){
return name+age;
}
alert(box.length);


function box(num1,num2){
return num1+num2;
}
方法一: function sum(num1,num2){//apply和call可以冒充另外一个函数
return box.apply(this,[num1,num2]);//this表示window作用域,【】表示传递的参数
}

方法二: function sum(num1,num2){
return box.apply(this,arguments);//这个可以当数组传递
}
//alert(box(10,10)); //20
alert(sum(10,10)); //20

function box(num1,num2){
return num1+num2;
}

function sum(num1,num2){
return box.call(this,num1,num2);//call只是传递参数不同,其他和apply一样
}
alert(sum(10,10));


var color="红色的";
var box={
color:'蓝色的'
}
function sayColor(){
alert(this.color);
}
sayColor(); //全局
//用call是实现对象冒充,冒充box下,冒充window下
sayColor.call(window); //冒充window红色的
sayColor.call(box); //冒充box,作用域就在box对象里面,所以color就是蓝色的

</script>
</body>
</html>

js函数声明的更多相关文章

  1. js函数声明外面使用小括号括起来再接一个小括号的写法

    js函数声明外面使用小括号括起来再接一个小括号的写法 (function(){})(); (function(){}()); !function(){}(); 总结ps:意思将函数声明变成,直接执行的 ...

  2. js函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...

  3. 转载 js函数声明和函数表达式

    在js中函数有两种表达方式.1 函数声明 2 函数表达式 函数声明 function sayname(){ alert("li lei"); } 函数表达式 var sayname ...

  4. js函数声明提升与变量提升

    变量提升 变量提升: 在指定作用域里,从代码顺序上看是变量先使用后声明,但运行时变量的 “可访问性” 提升到当前作用域的顶部,其值为 undefined ,没有 “可用性”. alert(a); // ...

  5. js 函数声明与函数表达式

      1,变量包括全局变量和局部变量,局部变量只能在函数内部访问.如果函数传参和全局变量一样的话,即使是给全局变量赋值,这里会把全局变量当成局部变量的. 如: 1: var x='x'; 2:   3: ...

  6. js 函数声明和函数表达式

    在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省 ...

  7. js 函数声明和函数表达式的区别

    javascript中声明函数的方法有两种:函数声明和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函数 ...

  8. JS函数声明与定义,作用域,函数声明与表达式的区别

    Scoping & Hoisting 例: var a = 1; function foo() { if (!a) { var a = 2; } alert(a); }; foo(); 上面这 ...

  9. js 函数声明方式以及javascript的历史

    1.function  xx(){} 2.匿名方式   window.onload=function(){dslfjdslfkjdslf}; 3.动态方式  var demo=new Function ...

随机推荐

  1. Azure Linux VM Swap 分区

    默认情况下,Windows Azure上的Linux VM是没有Swap分区的.下面我们以Ubuntu为例,为Windows Azure上的Linux虚拟机创建Swap分区. Windows Azur ...

  2. 【CSS】使用边框和背景

    1. 应用边框样式 先从控制边框样式的属性开始.简单边框有三个关键属性:border-width.border-style 和 border-color . <!DOCTYPE html> ...

  3. AC日记——字符环 openjudge 1.7 30

    30:字符环 总时间限制:  1000ms 内存限制:  65536kB 描述 有两个由字符构成的环.请写一个程序,计算这两个字符环上最长连续公共字符串的长度.例如,字符串“ABCEFAGADEGKA ...

  4. AC日记——配对碱基链 openjudge 1.7 07

    07:配对碱基链 总时间限制:  1000ms 内存限制:  65536kB 描述 脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成.而构成DNA的碱基共有4种,分别为腺瞟呤(A).鸟嘌 ...

  5. 转: Eclipse自动提示功能

    Eclipse的一个重要功能 2011-07-29 10:20:37 标签:java eclipse editor 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信 ...

  6. http协议(五)web服务器

    1.http1.1规范允许一台http服务器搭建多个web站点... 比如提供web托管服务的供应商,可以用一台服务器为多为客户服务,也可以以每位客户持有的域名运行各自不同的网站,这里利用了虚拟服务器 ...

  7. IOS-利用AFNetworking监听网络状态

    网络环境检测:检测用户当前所处的网络状态 效果图 1.当蜂窝和wifi同时关闭时候  显示为不可达(AFNetworkReachabilityStatusNotReachable)状态 2.打开蜂窝移 ...

  8. 拒绝了对对象 'XXX' (数据库 'XXX',架构 'dbo')的 SELECT 权限

    2010-04-17 23:16 在IIS里测试ASP.NET网站时会遇到这样的问题(ASP.NET+SQL2005)我自己的解决方法是这样的: 1.打开SQL2005管理界面(没有安装SQLServ ...

  9. 前端见微知著番外篇:GIT舍我其谁?

    在上一篇中,我们讲到了利用纯UI的软件如何实现代码的提交.但是在MAC机器上,是没有turtoiseGit这类软件的,所以利用命令行的方式就是我们的首选了. 下面我们来描述两种主要的Git使用场景: ...

  10. 20145222GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 实践代码example.c #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...