<!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. 安装rpm包

    下载好一个rpm包怎样安装? [root@localhost ~]# ls anaconda-ks.cfg install.log install.log.syslog jboss-as-7.1.1- ...

  2. Stanford机器学习笔记-6. 学习模型的评估和选择

    6. 学习模型的评估与选择 Content 6. 学习模型的评估与选择 6.1 如何调试学习算法 6.2 评估假设函数(Evaluating a hypothesis) 6.3 模型选择与训练/验证/ ...

  3. java 27 - 6 反射之 通过配置文件运行类中的方法

    在以前,如果我们想要调用一个类中的方法,只能这样子: 例: 有Cat和Dog两个类,里面有eat和run两个成员方法: public class Dog { public void eat() { S ...

  4. 转: Eclipse自动提示功能

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

  5. Github 安全类Repo收集整理

    作者:天谕链接:https://zhuanlan.zhihu.com/p/21380662来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.刚好这两天对之前github上关 ...

  6. ubuntu为用户增加sudoer权限的两种方法

    方法一.使用usermod命令 新增user sudo adduser username 增加sudo权限 sudo usermod -aG sudo username sudo usermod -a ...

  7. Json数据与Json数据转换

    1.json数据 [{\"IS_DISTRIBUTOR_LIMIT\":0,\"PROVISION_PRICE\":null,\"PRO_STATUS ...

  8. SQL Server系统表sysobjects介绍与使用(转))

    这就让sysobjects表格有了用武之地.虽然我不建议你更新这个表格,但是你当然有权对其进行审查. sysobjects 表  在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中 ...

  9. window10 安装出现the error code is 2503错误的解决方法

    window10 安装出现the error code is 2503错误的解决方法:  设置 C:\WINDOWS\TEMP的权限

  10. TP框架自带的正则验证的规则(转载)

    thinkphp框架里面自带有很多自动验证的规则,下面是框架自带的正则验证的规则,官方的说明文档里面没有这么多,所以记下来,以备使用. view sourceprint?01static $regex ...