作用域

undefined和is not defined一样吗?

老子叫甜甜 提交于 2019-12-11 00:35:10
undefined和is not defined,字面意思看来没什么两样,不都是未定义吗? 在JavaScript中,可并非如此。 undefined定义如下: undefined是javascript的一种 基本数据类型,变量未赋值 或者 函数没有返回值时返回。 xx is not defined: xxx is not defined是一种 错误类型 ,其完整形式是: Uncaught ReferenceError: xxx is not defined (未捕获的引用错误),对象 表明一个 不存在的变量 被引用 ,即:当你尝试引用一个 未被定义 的变量时,将会抛出一个 ReferenceError 。 由此可见:undefined和is not defined的本质区别在于:变量 是否被定义 。 接下来举个栗子把作用域和变量定义及未被定义说道说道。 涉及: 局部变量,全局变量,作用域 前两天加了一个群,群主分享了一道小测试,恰巧让我有机会重新思考文章开头提到的问题。 打印结果依次为:undefined-----30-----b is not defined 先分析c:30 ES5中,作用域分为全局作用域和函数作用域,c君未声明,直接赋值,即赋予了其全局光环,所以即使它囿于函数fn 范围内,但是依然可以跳脱出函数作用域的禁锢,自由活动,无论在哪都可打印出c君的值; 一句话

Bean的作用域

自作多情 提交于 2019-12-10 16:06:09
官网说明: Bean作用域 创建 bean 定义时,将创建一个配方,用于创建由 bean 定义定义的 class 的实际实例。 bean 定义是配方的 idea 很重要,因为它意味着,与 class 一样,您可以从单个配方创建许多 object 实例。 您不仅可以控制要插入到从特定 bean 定义创建的 object 的各种依赖项和 configuration 值,还可以控制从特定 bean 定义创建的 objects 的范围。这种方法功能强大且灵活,因为您可以选择通过 configuration 创建的 objects 的范围,而不必在 Java class level 的 object 范围内进行烘焙。 Beans 可以定义为部署在多个范围之一中。 Spring Framework 支持六个范围,其中四个范围仅在您使用 web-aware ApplicationContext 时可用。你也可以创建自定义范围。 以下 table 描述了支持的范围: 作用域 描述 singleton (默认)为每个 Spring IoC 容器的单个 object 实例定义单个 bean 定义。 原型 为任意数量的 object 实例定义单个 bean 定义。 请求 将单个 bean 定义范围限定为单个 HTTP 请求的生命周期。也就是说,每个 HTTP 请求都有自己的 bean 实例

jQuery插件定义

情到浓时终转凉″ 提交于 2019-12-10 03:19:37
一:导言   有些WEB开发者,会引用一个jQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery。我曾经也是这样的人,直到有一次公司里的技术交流,我才改变了自己对自己的看法。 二:普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: $.extend(object) 可以理解为JQuery 添加一个静态方法。 $.fn.extend(object) 可以理解为JQuery实例添加一个方法。 基本的定义与调用: /* $.extend 定义与调用 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ $.extend({ fun1: function () { alert("执行方法一"); } }); $.fun1(); /* $.fn.extend 定义与调用 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ $.fn.extend({ fun2: function () { alert("执行方法2"); } }); $(this).fun2(); //等同于 $.fn.fun3

关于Javascript 闭包的理解

﹥>﹥吖頭↗ 提交于 2019-12-10 03:06:54
一、什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 相信很少有人能直接看懂这句话,因为他描述的太学术。其实这句话通俗的来说就是: JavaScript中所有的function都是一个闭包 。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。看下面这段代码: function a() { var i = 0; function b() { alert(++i); } return b;}var c = a();c(); 这段代码有两个特点: 1、函数b嵌套在函数a内部; 2、函数a返回函数b。 引用关系如图:   这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:    当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。   让我们说的更透彻一些。所谓“闭包”,就是在构造函数体内定义另外的函数作为目标对象的方法函数,而这个对象的方法函数反过来引用外层函数体中的临时变量。这使得只要目标 对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的临时变量值

JSP九大内置对象和四大作用域

可紊 提交于 2019-12-09 23:56:37
jsp的九大内置对象 九大对象分别是 request 请求对象 作用域request response 回应对象 作用域page out 输出对象 作用域page session 会话对象 作用域session application 应用程序对象 作用域application pagecontext 页面上下文对象 作用域page config 配置对象 作用域page exception 例外对象 作用域page page 页面对象 作用域page 四大作用域 作用域 有效范围 request 当前请求 session 当前会话 page 当前页面 application 所有程序有效 来源: CSDN 作者: kings_coming 链接: https://blog.csdn.net/kings_coming/article/details/103464557

Javascript 严格模式详解

萝らか妹 提交于 2019-12-09 21:37:41
一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式: "严格模式" (strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立"严格模式"的目的,主要有以下几个:   - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;   - 消除代码运行的一些不安全之处,保证代码运行的安全;   - 提高编译器效率,增加运行速度;   - 为未来新版本的Javascript做好铺垫。 "严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经 支持 它,许多大项目已经开始全面拥抱它。 另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。 本文将对"严格模式"做详细介绍。 二、进入标志 进入"严格模式"的标志,是下面这行语句:   "use strict"; 老版本的浏览器会把它当作一行普通字符串,加以忽略。 三、如何调用 "严格模式"有两种调用方法,适用于不同的场合。 3.1 针对整个脚本文件 将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。如果这行语句不在第一行

ES6上

纵然是瞬间 提交于 2019-12-09 16:35:32
1.let和const命令 1.1let命令 类似于var,let声明的变量只在let命令所在的代码块有效 1.不存在变量提升 2.暂时性死区 使用let声明之前,该变量都是不可用的 3.不允许重复声明 在相同作用域不能重复声明同一个变量,不能在函数内部重新声明变量 1.2块级作用域 1.let实际为JS新增了块级作用域 外层代码块不受内层代码块的影响 ES6规定在块级作用域之中,函数声明类似于let,在块级作用域之外不可引用 2.do表达式 在块级作用域之外没办法得到内层的值,加上do,成为do表达式,可以得到整个块级作用域的返回值 1.3const命令 1.声明一个只读的常量,一旦声明,不能改变,同样也不能只声明而不赋值 作用域和let一样,只在声明的块级作用域有效 2.实际上不是值不能改变,而是变量指向的那个地址不得改动 1.4声明变量的方法:let var const import class function 1.顶层对象的属性 ES6规定var和function声明的全局变量依旧是顶层对象的属性 let/const/class声明的全局变量不属于顶层对象的属性 2.global对象 引入global作为顶层对象,在所有环境下,global都是存在的,都可以拿到顶层对象 2.变量的解构赋值 2.1数组 1.按照一定模式从数组和对象中提取值,然后对变量进行赋值

let&const

风流意气都作罢 提交于 2019-12-09 11:17:38
文章目录 1,let支持封闭作用域,声明的变量不会被提升到全局作用域上 2,let不允许在同一个作用域下可以多次声明同一个变量 3,let声明的变量不允许变量声明提升,不会向上查找。 4,const声明的变量不能被修改 1,let支持封闭作用域,声明的变量不会被提升到全局作用域上 //var 不支持封闭作用域(块级作用域),会声明到全局作用域上。ES6以前的只有两个作用域: //1,函数作用域 //2,全局作用域 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - for ( var i = 0 ; i < 3 ; i ++ ) { console . log ( i ) ; } console . log ( i ) ; console . log ( window . i ) ; //0 1 2 3 -- -- -- -- -- -- -- -- -- -- - //以下的方法可以实现块级作用域: ( function ( ) { for ( var i = 0 ; i < 3 ; i ++ ) { console . log ( i ) ; } } ) ( ) //0 1 2 for ( var i = 0 ; i < 3 ; i ++ ) { ( function ( i

Requset作用域

馋奶兔 提交于 2019-12-09 10:27:32
案例:当登陆密码或账号不正确时 提示 使用Requset对象中的作用域存储数据 语法: req.setAttribute(key, value);//键值对存在 当密码不存在时,设置作用域 else { // resp.sendRedirect("login.jsp"); req.setAttribute("msg", "账号或密码不正确"); req.getRequestDispatcher("login.jsp").forward(req,resp ); }  在jsp 里面读取 <% Object msg = request.getAttribute("msg"); %> <p style="color: red"><%=msg==null?"":msg%></p>      来源: https://www.cnblogs.com/ww103/p/11955597.html

函数作用域

前提是你 提交于 2019-12-08 18:47:32
★函数作用域 ⑴调用函数时创建函数作用域, 函数执行完毕以后,函数作用域销毁 ⑵ 每调用一次 ,函数就会 创建一个新的函数作用域 ,它们之间是互相独立的 ⑶在 函数作用域中 , 可以 访问到 全局作用域的变量 在 全局作用域 中 无法 访问到 函数作用域的变量 具体示例: ⑷当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用 示例: ⑸如果没有则向上一级作用域中寻找,直到找到全局作用域 示例: ⑹如果全局作用域中依然没有找到,则会报错 ReferenceError 示例: ⑺在函数作用域也有声明提前的特性: 使用 var关键字 声明的变量,会在函数中所有的代码 执行之前被声明 函数声明 也会在函数中所有的代码执行之前执行 示例1: 示例2: ⑻在函数中,不使用var声明的变量都会成为全局变量 示例1: 示例2: ⑼定义形参就相当于在函数作用域中声明了变量 示例1: 结果:弹出警示框中显示:20 示例2: 结果:弹出警示框中显示:undefined 来源: https://www.cnblogs.com/shihaiying/p/12006624.html