函数
在JavaScript中函数就是具有特定功能的代码段,可以分为两部分 声明 + 调用
1.函数的声明与调用
声明一个函数可以调用无数次(每次调用都是相互独立的)
- function关键字声明 (实名函数->有名字的函数)
function 函数名(){
//函数体
}
- 表达式声明(将一个匿名函数赋值给某个变量)
var 变量名 = function(){
//函数体 ->特定功能的代码段
}
- 函数的调用
函数名();
2.函数的简单使用
// 求1-100的和
//声明函数
function sum(){
var total = 0;
for(var i = 1;i<101;i++){
total+= i;
}
console.log(total);
}
//调用函数
sum();
3.函数的参数
- 形参:形式上的参数 (形参可以没有,可以是一个,也可以是多个,每个之间用逗号隔开)
- 实参:具体的值
function 函数名(形参1,形参2,...){
函数体;
}
函数名(实参1,实参2,...);
4.函数的arguments
- arguments是函数独有的 (实参的一个类数组集合)
// 求任意数字之和
function sum2() {
var total = 0;
// 将arguments集合中的每一项取出来相加
for(var i = 0;i<arguments.length;i++){
// console.log(arguments[i]);
total += arguments[i];
}
console.log(total);
}
sum2(100, 200, 300, 10, 20, 30, 50);
sum2(100, 200, 300, 10, 20, 30, 50, 200, 300, 1000);
sum2(100, 200, 300);
sum2(100, 200);
arguments注意问题
function test2(a, b) {
// arguments这个集合 和 a,b是一一对应的 (一个改变另一个也改变)
console.log(arguments);
console.log(arguments[0]);
// 修改实参的值
// 利用arguments修改了实参的值 形参的值也就变了
arguments[0] = "哈哈";
console.log(a);
var b = "你好啊"; //变量b将形参b的值覆盖了
console.log(b); //你好啊
console.log(arguments[1]); //你好啊
}
test2(100, 200);
5.函数注意问题
-
函数的重复命名 ,后边的覆盖前边的
-
函数的参数个数
-
实参个数等于形参个数 一一对应进行赋值
-
实参个数小于形参个数 一一对应进行赋值,没有赋值的形参默认值是undefined
-
实参个数大于形参个数 一一对应进行赋值,超出实参没影响(没有形参接收)
-
-
参数类型
- 函数的实参可以任意数据类型
-
函数中的this (this表示当前行为执行的主体)
- 在事件处理函数中this是触发的那个元素
- 函数调用就看前边有没有点,没有点this就是window,有点点前面是谁就是谁
在全局作用域下定义的变量或方法都是window的属性或方法,window可以省略
6.函数高级
在js中可以分全局作用域和局部作用域(私有作用域)
全局作用域:在srcript标签内,函数之外称之为全局作用域
局部作用域:(私有作用域):函数执行形成私有作用域
全局变量:全局作用域下定义的变量或者方法称之为全局变量方法
- 特点:可以在任意地方使用或修改
局部变量:在局部作用域中定义的变量或方法称之为局部变量或方法
- 特点:只能在当前作用域下使用 (只能在这个作用域里边去使用),外界不能够使用或修改
预解析
预解析(变量提升)
js代码运行到浏览器,浏览器提供了一个供js代码执行的环境,在代码执行之前先进行了预解析;会把全局作用域下所有带有var 和 function关键字的进行预解析 (全局作用域下预解析)(预解析完成代码从上到下执行)
预解析分为以下两部分
- 声明:var a; 只是声明了没有赋值
- 定义 a = 100; 赋值的操作
预解析的时候,带有var关键字的是只声明不定义,而带有function关键字是声明+定义
函数执行
首先函数执行形成私有作用域(局部作用域),函数体中代码从上到下执行,函数执行完毕会自动销毁;
全局下的预解析
console.log(a,b);//undefined undefined
var a = 10;
var b = 10;
console.log(a,b);//10 10
fn();
function fn(){
console.log("哈哈");
}
fn();
fn();
局部作用域下的预解析
函数执行形成一个局部作用域(私有作用域),函数体中的代码从上到下执行之前先进行形参赋值和预解析, (私有作用下预解析,解析的是私有作用域下的带有var和function关键字)(预解析完成代码从上到下执行) 其它的和全局作用域下的预解析是一样的;
作用域链
首先作用域链是一种查找机制,在当前作用域下用到某个变量或方法,先看当前作用域下有没有,没有往上一级作用域进行查找,上一级作用域没有再往上一层作用域进行查找依次类推,直到找到全局作用域为止;找不到就就报错了
函数的返回值
函数默认是没有返回值的,默认值是undefined
就是将函数内部的值返回给外界
语法:return 值;
- return的作用
- 首先是将函数内部的值返回给外界 (需要什么就return什么即可)
- 退出当前函数 (一旦遇到return函数就结束了,return之后的代码就不再执行了)
获取经过浏览器渲染的样式
标准浏览器下(只读) IE8及以下不兼容
getComputedStyle(元素对象).样式属性;
IE下独有的
元素对象.currentStyle.样式属性