javascript基础之函数
javascript的函数定义与python有很大的区别,的记住格式就好,下面请看代码
// 函数
// 简单定义
function func() {
console.log('hello word')
}
func(); // 函数的调用
function f2(a,b){
console.log('参数的个数',arguments.length);
console.log('查看函数的属性:',arguments);
return a*b;
}
var ret2=f2(3,4);
console.log('函数的返回值:',ret2);
// 匿名函数
var f3 =function(a,b) {
console.log('a:',a);
console.log('b:',b);
return a+b;
};
var ret3=f3(4,5);
console.log('返回值',ret3);
// 立即执行函数
(function (a,b) {
console.log('立即执行函数,可以有返回值');
return a % b;
})
var ret4=(3,4);
console.log('立即执行函数的返回值',ret4);
// 匿名函数的简写
var f5 = (a,b ) => a/b ;
var ret5=f5(2,2);
console.log('返回值',ret5)
javascript的函数可以多传值,但是只有只会取前面几个有效值。
也可以少传值,但是没传的地方当做undefined的字符串处理,有可能会报错,也有可能返回NuN之类的值(3+undefined的返回值就是一个不是数字)
函数中的命名空间(全局变量和局部变量)
与python相似的是局部可以去到全局去拿某个变量,但是不会改变其值,
var a =5;
function f6(a){
a +=2;
console.log('我是函数的a:',a);
}
f6(a);
console.log('我是全局的a:',a);
注意,如果全局里面有个变量,某个函数调用了他,但是函数的参数中没有提到他,这个变量就相当于一个全局变量,在函数内部的改变会影响外部变量的值;
var a =5;
function f6(){
a +=2;
console.log('我是函数的a:',a);
}
f6();
console.log('我是全局的a:',a);
这是a的值就会改变了,最后输出的结果为7,7。
输出结果说明会局部不会改变全局的变量。
闭包:
var city = "BeiJing";
function f(){
var city = "ShangHai";
function inner(){
console.log(city);
}
return inner;
}
var ret = f();
ret();
在javascript中的全部变量和局部变量满足一个叫词法分析的规则见下面:
当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:
1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。
2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。
3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。
函数内部无论是使用参数还是使用局部变量都到AO上找。
看看老师的两个例题:
var age = 18;
function foo(){
console.log(age);
var age = 22;
console.log(age);
}
foo(); // 问:执行foo()之后的结果是?
输出结果是
undefined
22
如果是python会直接报错,但是javascript不会,它会判断只是一个没有定义的变量。所以在没有赋值的情况下显示undefined。
对比一下python代码
a=5
def fun1():
print(a)
a=6
print(a)
try:
fun1()
except UnboundLocalError:
print("UnboundLocalError: local variable 'a' referenced before assignment")
print(a)
请看下面的终极代码
var age = 18;
function foo(){
console.log(age);
var age = 22;
console.log(age);
function age(){
console.log("呵呵");
}
console.log(age);
var age =33;
}
foo(); // 执行后的结果是?
输出结果:

1把2覆盖了

而且函数的级别比变量级别高,所以没有返回undifined。
javascript基础之函数的更多相关文章
- (Frontend Newbie)JavaScript基础之函数
函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- JavaScript 基础回顾——函数
在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...
- Javascript 基础--JS函数(三)
一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2) 基本语法 function 函数名(参数列表){ //代码; retur ...
- javascript基础(五)函数
原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...
- javascript基础知识-函数
1.javascript中函数有两种定义方式: 函数语句定义和表达式定义 //函数有定义 function test(){ console.log("This is a function&q ...
- JavaScript基础——创建函数
JavaScript的最重要的一个部分是制作其他代码可以重用的代码.要做到这一点,你可以把代码组织成执行特定任务的函数.函数是结合在一个单一的块中,并给予一个名称的一系列代码语句.然后,你就可以通过引 ...
- JavaScript基础之函数与数组
函数 函数的基本概念 为完成某一功能的程序指令(语句)的集合,称为函数.有的程序员把函数称为方法,希望大家不要被这两个名词搞晕了. 函数分为:自定义函数.系统函数(经常查看js帮助手册). j ...
- javascript基础知识--函数定义
函数声明式 function funname( 参数 ){ ...执行的代码 } 声明式的函数并不会马上执行,需要我们调用才会执行:funname(); * 分号是用来分隔可执行JavaScript语 ...
随机推荐
- Ocelot + Consul实践
关于Consul(https://www.consul.io)是一个分布式,高可用,支持多数据中心的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla ...
- 一个简单的案例带你入门Dubbo分布式框架
相信有很多小伙伴都知道,dubbo是一个分布式.高性能.透明化的RPC服务框架,提供服务自动注册.自动发现等高效服务治理方案,dubbo的中文文档也是非常全的,中文文档可以参考这里dubbo.io.由 ...
- Linq用法小记
一.什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...
- leetcode — remove-duplicates-from-sorted-list-ii
/** * Source : https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/ * * * Given a ...
- leetcode — subsets-ii
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...
- 监控mysql
Mysql服务器监控 管理MySql服务器属于应用程序监控范畴.这是因为绝大多数性能参数是有MySql软件产生的,而不属于主操作系统的一部分. 如当前所提到的,应该总是先监控基础操作系统,然后监控My ...
- linux-2.6.18源码分析笔记---进程
一.进程重要字段描述 在目录include\linux\sched.h下定义了进程描述符task_struct,关注如下字段: 进程状态 volatile long state:表示进程状态,在该文件 ...
- Flask的请求处理机制
在Flask的官方文档中是这样介绍Flask的: 对于Web应用,与客户端发送给服务器的数据交互至关重要.在Flask中由全局的request对象来提供这些信息 属性介绍 request.method ...
- DAL分页
using System;using System.Collections.Generic;using LModel.DTO;using Newtonsoft.Json;using System.Da ...
- 第一册:lesson 111.
原文:The most expensive model. question:Can Mr.Frith buy the television on instalments? How does it wo ...