JS页面获取 session 值,作用域和闭包学习笔记


Posted in Javascript onOctober 16, 2019

本文实例讲述了JS页面获取 session 值,作用域和闭包。分享给大家供大家参考,具体如下:

Javascript获取session的值:

var name= "${sessioScope.变量名}";

注意这里面需要使用 "" 把 El 表达式给括起来,否则就取不到数据。

JSP获取session的值:

可以直接${sessionScope.变量名},在标签里也是一样。

JSP获取URL的值:

var name = "<%=request.getParameter("name")%>";//谨记:在""中的表达式‘<%= %>'结尾不能加‘;'号,且只能写一句。
var id = ${param.id};//也具有同样的效果,能用在JS类库中的jQuery语法。

在四大作用域中,每一个作用域的取值方法大同小异,方法与技巧都是一以贯之的。

下面是关于作用域和作用链的一些笔记:

作用域(scope):它是指对某一变量和方法具有访问权限的代码空间,在JS中, 作用域是在函数中维护的。表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境。Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的。

变量作用域

在JavaScript中全局变量的作用域比较简单,它的作用域是全局的,在代码的任何地方都是有定义的。然而函数的参数和局部变量只在函数体内有定义。另外局部变量的优先级要高于同名的全局变量,也就是说当局部变量与全局变量重名时,局部变量会覆盖全局变量(如下面例子)。

var num = 1;      //声明一个全局变量
function func() {
  var num = 2;    //声明一个局部变量
  return num;
}
console.log(num);    //输出:1
console.log(func());  //输出:2

注:声明局部变量时一定要使用var,否则,解释器会将该变量当做全局对象window的属性。关于变量的详细笔记地址:原生javascript 学习之js变量全面了解

函数作用域

在JavaScript中变量的作用域,并非和C、Java等编程语言似得,在变量声明的代码段之外是不可见的,我们通常称为块级作用域,然而在JavaScript中使用的是函数作用域(变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的)。(如下面的例子)

function func() {
  console.log(num);      //输出:undefined,而非报错,因为变量num在整个函数体内都是有定义的
  var num = 1;        //声明num 在整个函数体func内都有定义
  console.log(num);      //输出:1
}
func();//调用func函数

注:JavaScript的函数作用域是指在在函数内声明的所有变量在函数体内始终是可见的,也就是说在函数体内变量声明之前就已经可用了。

作为属性的变量:

当声明一个全局变量的时候,实际上是定义了全局对象window的一个属性。

var num = 1;      //声明全变量num
alert(window.num)    //输出:1 声明的全局变量实际上就是声明了一个window对象的属性

作用域链

在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。

当一个函数创建后,它实际上保存一个作用域链,并且作用域链会被创建此函数的作用域中可访问的数据对象填充。例如定义下面这样一个函数:

function func() {
  var num = 1;
  alert(num);
}
func();

在函数func创建时,它的作用域链中会填入一个全局对象,该全局对象包含了所有全局变量,如下图所示(注意:图片只例举了全部变量中的一部分):

JS页面获取 session 值,作用域和闭包学习笔记

函数add的作用域将会在执行时用到。例如执行如下代码:

执行此函数时会创建一个称为"运行期上下文(execution context)"(有人称为运行环境)的内部对象,运行期上下文定义了函数执行时的环境。每个运行期上下文都有自己的作用域链,用于标识符解析,当运行期上下文被创建时,而它的作用域链初始化为当前运行函数的[[Scope]]所包含的对象。

这些值按照它们出现在函数中的顺序被复制到运行期上下文的作用域链中。它们共同组成了一个新的对象,叫"活动对象(activation object)",该对象包含了函数的所有局部变量、命名参数、参数集合以及this,然后此对象会被推入作用域链的前端,当运行期上下文被销毁,活动对象也随之销毁。新的作用域链如下图所示:

JS页面获取 session 值,作用域和闭包学习笔记

闭包学习笔记:

闭包:在js中的我的理解就是把外部的变量引用到函数内部形成一个完全封闭的函数体;当内部函数在定义它的作用域的外部被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被释放,因为闭包需要它们。

所以本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

用途:闭包可以读取函数外部的变量,可以让变量的值始终保持在内存中。

使用闭包要注意:

1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery + Flex 通过拖拽方式动态改变图片的代码
Aug 03 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
javascript原始值和对象引用实例分析
Apr 25 Javascript
avalonjs制作响应式瀑布流特效
May 06 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
Apr 29 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
jquery对Json的各种遍历方法总结(必看篇)
Sep 29 Javascript
Javascript生成带参数的二维码示例
Oct 10 Javascript
angular仿支付宝密码框输入效果
Mar 25 Javascript
js实现简单的秒表
Jan 16 Javascript
js实现图片跟随鼠标移动效果
Oct 16 #Javascript
vue实现鼠标经过动画
Oct 16 #Javascript
javascript实现动态时钟的启动和停止
Jul 29 #Javascript
JavaScript Canvas编写炫彩的网页时钟
Oct 16 #Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
Oct 16 #Javascript
javascript实现点亮灯泡特效示例
Oct 15 #Javascript
vue-cli 为项目设置别名的方法
Oct 15 #Javascript
You might like
PHP实现的封装验证码类详解
2013/06/18 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
用javascript实现画板的代码
2007/09/05 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
python中函数传参详解
2016/07/03 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
C语言面试题
2013/05/19 面试题
护士实习鉴定范文
2013/12/22 职场文书
2014组织生活会方案
2014/05/19 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python