作用域 var 词法分析 arguments

作用域

在JS中函数嵌套非常普遍,在函数嵌套中,对变量的寻找方式先是从函数内部向里寻找,找不到,则往外层函数寻找,直到----全局(window)区域

如:

var是声明变量

var是在函数运行的上下文中声明一个变量,如果不加var,则是一个赋值操作,(按照作用域特点上,追溯查找并赋值)

如果不加var声明直接进行赋值,该数据会污染全局

词法分析

词法分析,分析3样内容

1、先分析参数

2、在分析变量声明

3、分析函数声明

一个函数能使用的局部变量,就是从上面的3步分析而来的

具体的步骤:

1、函数运行前的一瞬间,生成 Active Object(活动对象),简称AO

2、函数声明的参数,形成AO属性,值为实参的值,未传实参则为undefined

3、分析变量声明  如:var age,

如果AO上还没有age属性,则添加age属性,值为undefined

如果AO上已经有age属性,则不做任何影响

4、分析函数声明,如function foo() {},

则把函数赋给AO.foo属性

*注*如果此前foo属性已经存在,则被无情的覆盖了

 

arguments 对象

函数运行其内,关键的3个对象

AO:本函数AO上没有某属性,则继续去外层函数的AO上找,直到全局对象,叫做“作用域链”

arguments:每个函数有自己的arguments,但不向外层接着找arguments的相关属性,即不形成链。

this:沿原型查找,形成原型链。

arguments是函数调用时的实参列表。

代码:

arguments代表收到的所有实参

arguments.callee属性

callee代表“当前运行的函数”

例如:用递归匿名函数的方式 求1到100的和

时间: 2025-01-02 18:07:57

作用域 var 词法分析 arguments的相关文章

函数和函数的作用域问题,arguments

this的值:在函数执行时,this关键字并不会指向正在运行的函数本身,而是指向调用该函数的对象.所以,如果你想在函数内部获取函数自身的引用,只能使用函数名或者使用argument.callee属性(严格模式下不可用),如果该函数是一个匿名函数,则你只能使用后者. 1.定义函数 三种方式: 1)函数声明 (function语句) function name([param[, param[, ... param]]]) { statements } name函数名. param函数的参数的名称,一

JS中的块级作用域,var、let、const三者的区别

1. 块作用域{ } <script type="text/javascript"> { var a = 1; console.log(a); // 1 } console.log(a); // 1 // 可见,通过var定义的变量可以跨块作用域访问到. (function A() { var b = 2; console.log(b); // 2 })(); // console.log(b); // 报错, // 可见,通过var定义的变量不能跨函数作用域访问到 if(

YDKJS:作用域与闭包

作用域与闭包 什么是作用域 编译器 理解作用域 嵌套的作用域 词法作用域 词法分析时 欺骗词法作用域 函数与块作用域 函数中的作用域 隐藏标识符于普通作用域 函数作为作用域 块作为作用域 提升 先有鸡还是先有蛋? 编译器再次袭来 函数优先 作用域闭包 启蒙 事实真相 循环 + 闭包 模块 什么是作用域 作用域是一组定义在何处储存变量以及如何访问变量的规则. 编译器 javascript 是编译型语言.但是与传统编译型语言不同,它是边编译边执行的.编译型语言一般从源码到执行会经历三个步骤: 分词/

js 的作用域

js的作用域 一. 方式1.常用方式: function test (参数) { ………….方法的实现……………….. }这种方式的函数声明的先后位置与调用无关,可以在调用的前面声明,也可以在调用的后面声明;2.匿名函数: 把方法赋给一个变量,此时这个变量是一种方法类的变量;Var a = function (参数) {………..方法的实现……………………}这种方式的函数声明必须放在调用的前面;匿名函数直接调用的方式,例如: alert(function () {} 二. 参数的管理:每一个函数

js——作用域和闭包

1. js是编译语言,但是它不是提前编译,编译结果不能在分布式系统中移植.大部分情况下,js的编译发生在代码执行前的几微秒(甚至更短) 2. 一般的编译步骤 分词/词法分析:把字符串分解成词法单元 解析/语法分析:将词法单元转换成一个由元素组成的语法结构树,抽象语法树AST 代码生成:将AST转换成一组机器指令 3. 三个工具 引擎:控制整个程序的编译及执行过程 编译器:负责语法分析及代码生成等 作用域:收集并维护所有声明的标识符的访问权限 4. var a = 2 的编译过程 var a=2;

JavaScript (JS) 函数补充 (含arguments、eval()、四种调用模式)

1. 程序异常 ① try-catch语法    测试异常 try-catch语法代码如下: try { 异常代码;     try中可以承重异常代码, console.log("try")  出现异常代码后,正确代码不会执行 } catch (e) { console.log("e:"+e);  try中出现异常在e中展现出来 console.log("catch");  只有try中出现异常才执行这段代码 } finally { consol

js 默认的参数、可变的参数、变量作用域

可以通过arguments对象来实现可变的参数 在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们. arguments是一个数组对象,可以通过下标来实别参数的位置,通过.length来获参数的个数. 代码实例:我们通过arguments来改变函数的默认参数 1 <script> 2 function demo(x,y){ 3 x = arguments[0]?arguments[0]:1; //arguments[0]代表demo函数的参数第一个 4 y

数组filter等和arguments结合闭包实现函数复用

<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width;initial-scale=1.0;user-scalable=no"><title>数组filter等和arguments结合闭包实现函数复用</title><

JavaScript(二) 函数定义以及arguments使用

Function函数定义的三种方式: 1.function语句形式:2.函数直接量的形式 3.构造函数形式前两种创建函数区别:function语句形式,JavaScript解释器直接去找并解释:相当于js代码上来就解释function语句形式:其他的代码从上到下执行可以理解成,第一种可以在任何位置调用:而第二种只能在定义之后调用:第三种具有顶级作用域的作用 arguments对象, 每一个函数内部都有一个arguments对象1.接收函数的实际参数 2.用于递归操作 //Function函数 /