JavaScript基础--函数声明,函数的作用域链

函数声明和函数表达式区别

函数声明是通过 function 函数名(){}来声明一个函数

函数表达式是通过声明一个变量,然后赋值函数。

两者区别是,在程序执行前,会先获取函数声明声明的函数,获取变量的声明,这里变量的声明只是先开辟一个空间,然后给了个名字,之后到该变量名赋值的时候,才有值,也就是说,在未得到该变量的赋值前,使用该变量会得到undefined。

而无论你把函数放在放在程序中的开头或者结尾,函数的执行语句都能正常执行。

fn();//输出   fn
console.log(fn2);// undefined 声明了,没有值,自动赋值undefined
function fn(){console.log(‘fn‘)}//函数声明
var fn2 = function(){console.log(‘fn2‘)};//函数表达式
fn2();//输出  fn2

变量的声明前置和函数的声明前置

上面那个问题有回答。

arguments 是什么?

arguments是函数内部的一个对象,对应着传进来的参数,是一个类数组对象,没有操作数组的方法。

每个传进来的参数对应着arguments[0],arguments[1],有先后顺序之分。

比如function fn(name,age){

console.log(arguments[0];);

console.log(arguments[1];);

}

javascript中函数的重载?

在javascript中没有函数重载,因为相同的函数名字,如果定义的参数个数不一样,后出现的会覆盖先出现的。

所以,通过内部访问arguments可以不用管传进来多少个参数,尽管访问就可以了,但是传进来的参数有先后之分。

什么是立即执行函数表达式,作用是什么?

函数的作用域链是什么?

时间: 2024-10-09 13:03:35

JavaScript基础--函数声明,函数的作用域链的相关文章

函数执行时的作用域链和活动对象是怎么形成的及与闭包的关系

函数执行时的作用域链和活动对象是如何形成的及与闭包的关系1.javascript解析器启动时就会初始化建立一个全局对象global object,这个全局对象就 拥有了一些预定义的全局变量和全局方法,如Infinity, parseInt, Math,所有程序中定义的全局变量都是这个全局对象的属性.在客户端javascript中,Window就是这个javascript的全局对象. 2.当javascript执行一个function时,会生成一个对象,称之为call object,functio

javascript中定义声明函数的四种方法

javascript中定义声明函数的四种方法 :http://blog.163.com/zzf_fly/blog/static/209589158201286104927248/ 方法一:function functionName([parameters]){functionBody}; 方法二:将一个未命名的函数function赋给一个指定变量(var):var add=function(a, b){} 方法三:使用new运算符声明函数varName=new Function([param1N

js基础--javascript基础概念之变量与作用域

js基础--javascript基础概念之变量.作用域 javascript按照ECMA-262 的定义,变量与其他语言变量有所不同.js变量时松散的,不需要事先定义变量类型的.这使得他只是一个保存特定值的一个名称.变量与其数据类型可以在脚本的生命周期内改变. 还有明白几点: JavaScript的变量作用域是基于其特有的作用域链的,JavaScript没有块级作用域. 基本类型和引用类型的值 ECMAScript 的变量有两种不同的数据类型:分别是 基本数据类型值 和 引用类型值 : 基本数据

深入理解JavaScript系列(14):作用域链(Scope Chain)

前言 在第12章关于变量对象的描述中,我们已经知道一个执行上下文 的数据(变量.函数声明和函数的形参)作为属性存储在变量对象中. 同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段. 这一章专门讨论与执行上下文直接相关的更多细节,这次我们将提及一个议题——作用域链. 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-4-scope-chain/ 中文参考:http://www.denisdeng.com/?p

javascript基础修炼——一道十面埋伏的原型链面试题

javascript基础修炼--一道十面埋伏的原型链面试题 在基础面前,一切技巧都是浮云. 题目是这样的 要求写出控制台的输出. function Parent() { this.a = 1; this.b = [1, 2, this.a]; this.c = { demo: 5 }; this.show = function () { console.log(this.a , this.b , this.c.demo ); } } function Child() { this.a = 2;

[Effective JavaScript 笔记]第15条:当心局部块函数声明笨拙的作用域

嵌套函数声明.没有标准的方法在局部块里声明函数,但可以在另一个函数的顶部嵌套函数声明. function f(){return "global"} function test(x){ var result=[]; function f(){return "local";}//block-local if(x){ result.push(f()); } result.push(f()); return result; } test(true);//["loc

JavaScript基础篇(四)— — 函数

一.函数基础 ??1.返回值:如果某个函数没有显式的return返回值,默认它的返回值为undefined ??2.参数:内建变量arguments,能返回函数所接收的所有参数 ???? ??3.预定义(内建)函数 -- isNaN: ????a.检测parseInt / parseFloat调用是否成功. ???? ????b.NaN不存在等值的概念, 也就是说表达式NaN === NaN 返回的是false 二.函数的变量作用域 ??1.变量提升:函数域优先于全局域,所有局部a会覆盖掉所有与

javascript两种声明函数的方式的一次深入解析

声明函数的方式 javascript有两种声明函数的方式,一个是函数表达式定义函数,也就是我们说的匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /*方式二*/ function FUNCTION_NAME () { /* FUNCTION_BODY */}; 区别一 方式一的声明方式是先声明后使用 方式二的声明方式可以先调用,后声明 /*方式一: *先声明后使用 *

一步步学习javascript基础篇(2):作用域和作用域链

作用域和作用域链 js的语法用法非常的灵活,且稍不注意就踩坑.这集来分析下作用域和作用域链.我们且从几道题目入手,您可以试着在心里猜想着答案. 问题一. if (true) { var str = "李四"; } alert(str);//弹出值是? 问题二. function add(num1, num2) { var sum = num1 + num2; } add(1,2); alert(sum) //弹出值是? 问题三. var str1 = "张三"; v

函数的嵌套和作用域链,闭包

函数嵌套:  #指在第二个函数里面调用第一个函数的结果 def func(): print('sss') def func1(f): f() func1(func) 作用域链:   #最内层的函数可以调用并且更改其他函数内的代码变量但是只限制于函数这个作用域内的变量  全局的变量不能被内部函数调用 否则会报错 #除非声明global 全局变量  全局变量一般不会经常使用 因为会影响整个局面 def func(): a = 1 def func1(): a +=1 print(a) func1()