文档章节

JavaScript 函数

phpweishunlong
 phpweishunlong
发布于 2017/05/14 23:36
字数 628
阅读 2
收藏 0

函数

前言

  • 在JavaScript中,函数即对象,程序可以随意操控它们。比如JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数。

定义函数

1. 第一种方式

//在这里调用可以
test();

function test(){
	console.log('aaa');
}

2. 第二种方式

//这样调用不行
squre();

//将函数赋值给squre变量
var squre = function (x) { return x*x; };

//也可以有名字
var squre = function fact() {return x;};
3. 第三种方式

//函数会自动调用
(function (x) {return x*x;})(10);

函数作用域

1. 如果一个变量在函数体内部声明,则该变量的作用域为整个函数体,在函数体外不可引用该变量

function foo() {
	var x = 1;
	x = x + 1;
}

x = x + 2; //无法在foo函数体外引用变量x


2. 如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用。换句话说,不同函数内部的同名变量互相独立,互不影响

function foo() {
	var x = 1;
	x = x + 1;
}

//bar函数中的变量不会受foo函数影响
function bar() {
    var x = 'A';
    x = x + 'B';
}

3. 由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行

function foo() {
    var x = 1;
    function bar() {
        var y = x + 1; // bar可以访问foo的变量x
    }

    var z = y + 1; //  foo不可以访问bar的变量y
}

4. 如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量

function foo() {
    var x = 1;
    function bar() {
        var x = 'A';
        alert('x in bar() = ' + x); // 'A'
    }
    alert('x in foo() = ' + x); // 1
    bar();
}

5. 变量提升

JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部


function test(){
	console.log(a);//undefined;
	var a = 12;
}

//相当于下面
function test(){
	
	var a;

	a = 12;
}

闭包

所谓闭包其实就是函数中包含了函数。

function foo(){

	//由于sex是局部变量,只能在foo内部访问。类似于类的私有属性
	var sex = '男';

	function getSex(){
		console.log(sex);
	}

	//将getSex函数返回
	return getSex;
}


闭包可以封装一个私有变量,类似php中的private效果。

function foo(){

	//由于sex是局部变量,只能在foo内部访问。类似于类的私有属性
	var sex = '男';

	function getSex(){
		console.log(sex);
	}

	//将getSex函数返回
	return getSex;
}

//调用foo函数
var res = foo();

//res其实就是getSex函数
res();

© 著作权归作者所有

共有 人打赏支持
phpweishunlong
粉丝 1
博文 64
码字总数 26288
作品 0
广州
程序员

暂无文章

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
1
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
6
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部