函数基础知识回顾
回顾一下
一 基本类型和引用类型
1 五大基本类型:
String Number Boolean Null undefined //占有固定的内存大小,如数值型占八个字节,布尔类型占一个字节,他们的值 保存在栈空间,
2 三大引用类型
数组(array) 对象(Object) 函数(function)//引用类型占用空间内存不确定,但内存地址大小是固定的,存储的实际上是 数据的内存地址
3 在变量复制时候,基本类型复制的是值本身,而引用类型复制的是地址
二 执行环境和作用域
1 执行环境定义了变量或函数有权访问其他数据
2 全局执行环境是最外围的执行环境,在web浏览器中,全局执行环境是window对象,全局变量的声明关键词为var ,也可不写
3 内部环境可以访问到外部环境的变量和函数,但外部环境不能访问到内部环境的变量和函数
4 访问局部变量要比访问全局变量快
<script>
var name = "张三"; //定义全局变量
alert(name) //张三
alert(window.name); //全局变量,最外围,属于window属性
var a={
setName: function (){
return this.name;//undefinded this指向a
}
}
alert(a.setName());
</script>
<script>
var name = "张三"; //定义全局变量
alert(name)
alert(window.name); //全局变量,最外围,属于window属性
var a={
name:"李四",
setName: function (){
return name;// 张三 //直接访问全局变量name
}
}
alert(a.setName());
</script>
<script>
var name = "张三"; //定义全局变量
alert(name)
alert(window.name); //全局变量,最外围,属于window属性
var a={
name:"李四",
setName: function (){
return this .name;// 李四 this指向a
}
}
alert(a.setName());
</script>
下面再来体会几个作用域的例子
<script>
function setName(){
var name="张三"
function setYear(){ //setYear()方法的作用域在setName()内
var age=21;
var str=name+age+'岁了' ;
return str;
}
return setYear()
}
alert(setName()); //弹出 张三21岁了
</script>
三 内存管理
1. 内存分配:当我们申明变量、函数、对象的时候,系统会自动为他们分配内存
2 分配和回收都是自动完成的,当内存不在使用时就会被回收,如当函数执行完之后,则会立即被回收
<script>
// 为变量分配内存
var m= 123;
var n = "JavaScript";
// 为对象分配内存
var person = {
age: 25,
name: '张三'
};
// 为函数分配内存
function sum(m, n) {
return m+n;
}
alert(sum(m,n))
</script>
四 函数作为参数的几种方式
1.函数作为另一个函数的参数
2 有参函数函数作为参数
<script >
//第一种函数作为另一个函数的参数
function f(){
alert("我是作为参数的函数")
}
function s(a){//此处啊作为形参,可以是任意值
a();
}
s(f);
//第二种函数作为另一个函数的参数
function people(){
return 100
}
function sum(x,y){
alert(x+y())
}
sum(10,people)
//有参函数作为函数参数
function fun(a){
return a*a;
}
function ss(x,z){
alert(x+z(x))
}
ss(100,fun)
</script>
五 函数的内部属性
1 arguments 本质上相当于一个集合,表示函数参数的一个集合
2 使用arguments.length检测函数参数个数
<script >
function sum(){
alert(arguments.length)//检测参数个数
result=0;
for(var i=0;i<arguments.length;i++){
result+=arguments[i]
}
return result;
}//求参数和
alert(sum(1,2))
alert(sum(1,2,3,4));
</script>
//内部属性具体举例
<script>
//在函数外部使用this,this就指的是window对象
alert(this)
//全局变量可以看做window对象的属性
var x=1;
alert(window.x)
alert(this.x)
</script>
//函数内部调用
<script>
var x=1;
function test(){
var x=0;
alert(x) //这里的x为0
alert(this.x); //这里的x为1
alert(this) //window对象
}
//test()
//用new来调用,那么绑定的将是新创建的对象
function test2(){
this.x = 100;
}
var obj = new test2();//new改变this指向
alert(x); //这里的x为1
alert(obj.x);//这里的x为100
</script>
//作为某个对象的方法调用
一 匿名函数
定义:没有函数名字的函数
1.单独的匿名函数是无法运行和调用的
2. 可以把匿名函数赋值给变量
3. 通过(匿名函数)()来执行
4. 匿名函数传递参数(匿名函数)(参数)
接下来看一些小例子
<script >
<!-- //普通函数 -->
function people(){
alert("我是一个好人")
}
people()
// //把参数赋值给一个变量
var str=function(){
alert("把函数赋值给一个变量")
}
alert(str) //弹出函数体本身
str() //弹出结果
// 匿名函数
(function() {
alert("你是一个坏人")
})()
//带参数的匿名函数
(function(m,n) {
alert(m+n)
})(100,200)
</script>
这里提一下闭包,下节细讲
二 闭包
定义:闭包是指可以访问另一个函数作用域中的变量
在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁
常见方式
闭包的常见方式就是在一个函数中创建里另一个函数
作用:通过闭包可以访问局部变量
可以让局部变量始终保持在内存中
<script>
// 通过全局变量来累加
var num= 100;
function add() {
alert(++num);
}
add();
add();
add(); // 每执行函数一次,累加一次;
// 通过局部变量无法实现累加
function add(){
var num= 100; // 这里改为局部变量;
alert(num++);
};
add();add();add();
// 通过闭包实现局部变量的累加
function add(){
var num= 100; // 这里改为局部变量;
return function(){
num++;
alert(num);
}
};
// add()();add()();add()();//这种调用方式会出错,因为每次调用 num都会初始化一次;
var fn=add()//只在这里初始化一次,后边调用的时候执行的是里边的匿名函数
fn();fn();fn();
fn=null //应及时解除引用,否则会占用更多存
</script>
- C/C++——柔性数组
- 用shell脚本巧妙统计文件(r2笔记57天)
- MATLAB技巧——imshow多张图片
- MATLAB技巧——sort和sortrows函数
- Python对商品属性进行二次分类并输出多层嵌套字典
- 通过shell得到数据库中权限的脚本(r2笔记77天)
- 用Python实现PCA和MDA降维和聚类
- 通过shell解析dump生成parfile(r2笔记76天)
- Web Spider实战1——简单的爬虫实战(爬取"豆瓣读书评分9分以上榜单")
- 如何用R语言从网上读取多样格式数据
- C/C++——生成随机数
- PHP基础——PHP数组
- 使用shell抽取html数据之二(r2笔记75天)
- Python爬取链家网数据:新房楼盘价格分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法