js函数声明
<!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函数声明的更多相关文章
- js函数声明外面使用小括号括起来再接一个小括号的写法
js函数声明外面使用小括号括起来再接一个小括号的写法 (function(){})(); (function(){}()); !function(){}(); 总结ps:意思将函数声明变成,直接执行的 ...
- js函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- 转载 js函数声明和函数表达式
在js中函数有两种表达方式.1 函数声明 2 函数表达式 函数声明 function sayname(){ alert("li lei"); } 函数表达式 var sayname ...
- js函数声明提升与变量提升
变量提升 变量提升: 在指定作用域里,从代码顺序上看是变量先使用后声明,但运行时变量的 “可访问性” 提升到当前作用域的顶部,其值为 undefined ,没有 “可用性”. alert(a); // ...
- js 函数声明与函数表达式
1,变量包括全局变量和局部变量,局部变量只能在函数内部访问.如果函数传参和全局变量一样的话,即使是给全局变量赋值,这里会把全局变量当成局部变量的. 如: 1: var x='x'; 2: 3: ...
- js 函数声明和函数表达式
在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省 ...
- js 函数声明和函数表达式的区别
javascript中声明函数的方法有两种:函数声明和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函数 ...
- JS函数声明与定义,作用域,函数声明与表达式的区别
Scoping & Hoisting 例: var a = 1; function foo() { if (!a) { var a = 2; } alert(a); }; foo(); 上面这 ...
- js 函数声明方式以及javascript的历史
1.function xx(){} 2.匿名方式 window.onload=function(){dslfjdslfkjdslf}; 3.动态方式 var demo=new Function ...
随机推荐
- unordered容器
1.散列容器(hash container) 散列容器通常比二叉树的存储方式可以提供更高的访问效率. #include <boost/unordered_set.hpp> #includ ...
- 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- checkbox勾选判断
var xieYi=document.getElementById("xieYi"); if(!xieYi.checked){ alert("请先阅读并勾选购买协议!&q ...
- RecycleView + CardView 控件简析
今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...
- [Top-Down Approach] Assignment 1: WebServer [Python]
Today I complete Socket Programming Assignment 1 Web Server Here is the code: #!/usr/bin/python2.7 # ...
- 【HTML5】使用多媒体
HTML5 支持直接在浏览器中播放音频和视频文件,不需要使用Abode Flash这样的插件. 1. 使用 video 元素 可以用video 元素在网页里嵌入视频内容. 其基本用法如下: <! ...
- 树网的核[树 floyd]
描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T ...
- POJ1065Wooden Sticks[DP LIS]
Wooden Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21902 Accepted: 9353 De ...
- 第二章《深入C#数据类型》项目经理评分
一:创建MyOffices项目,创建UserInfo类,用来存储员工 工号,姓名,年龄,评价,年度得分 二:创建查看评分窗体(frmShow),添加定义员工数组,将员工数据绑定到frmShow窗体的L ...
- 嵌入式Linux 修改启动LOGO
1.嵌入式 Linux LOGO显示原理 嵌入式Linux是直接在FrameBuffer的基础上.直接显示一个ppm格式的图象. 它 kernel/drivers/video/fbc ...