作用域

JS 的5个不良编码习惯(转)

六月ゝ 毕业季﹏ 提交于 2019-12-06 16:24:57
原文链接 在阅读JavaScript代码时,你是否有过这种感觉 你几乎不明白代码的作用? 代码使用了很多 JavaScript 技巧? 命名和编码风格太过随意? 这些都是不良编码习惯的征兆。 在这篇文章中,我描述了JavaScript中常见的5种不良编码习惯。重要的是,本文会给出一些可行的建议,如何的摆脱摆脱这些习惯。 1.不要使用隐式类型转换 JavaScript是一种松散类型的语言。 如果使用得当,这是一个好处,因为它给你带来了灵活性。 大多数运算符 + - * / == (不包括 === )在处理不同类型的操作数时会进行隐式转换。 语句 if(condition){...} , while(condition){...} 隐式地将条件转换为布尔值。 下面的示例依赖于类型的隐式转换,这种有时候会让人感到很困惑: console.log("2" + "1"); // => "21"console.log("2" - "1"); // => 1console.log('' == 0); // => trueconsole.log(true == []); // -> falseconsole.log(true == ![]); // -> false 过度依赖隐式类型转换是一个坏习惯。 首先,它使你的代码在边缘情况下不太稳定。 其次,增加了引入难以重现和修复的bug的机会。

ECMAScript 6

此生再无相见时 提交于 2019-12-06 15:19:27
本文出自珠峰培训: http://www.zhufengpeixun.cn/ahead/html/1.ES2015.html 1. 作用域变量 作用域就是一个变量的作用范围。也就是你声明一个变量以后,这个变量可以在什么场合下使用 以前的 JavaScript 只有全局作用域,还有一个函数作用域 1.1 var的问题 var没有块级作用域,定义后在当前闭包中都可以访问,如果变量名重复,就会覆盖前面定义的变量,并且也有可能被其他人更改。 if (true) { var a = "a"; // 期望a是某一个值 } console.log(a); var在for循环标记变量共享,一般在循环中使用的i会被共享,其本质上也是由于没有块级作用域造成的 for (var i = 0; i < 3; i++) { setTimeout(function () { alert(i); }, 0); } 1.2 块级作用域 在用var定义变量的时候,变量是通过闭包进行隔离的,现在用了let,不仅仅可以通过闭包隔离,还增加了一些块级作用域隔离。 块级作用用一组大括号定义一个块,使用 let 定义的变量在大括号的外面是访问不到的   1.2.1 实现块级作用域 if(true){ let name = 'zfpx'; } console.log(name);// ReferenceError: name

自学 Python 之函数的参数

假如想象 提交于 2019-12-06 14:59:55
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 我是狗哥,一名程序猿。做过 Android、撸过 Java、目前在自学 Python 。注册 「一个优秀的废人」这个公号已有些日子,真正有心将它运营起来是这两天萌生的想法。注册这个号的初衷是分享我的 Python 学习笔记。一个知识,你自己懂,不算是真的懂,你能把他人说懂,才是真正掌握。分享,是一个最好的复习过程。 什么是参数? 参数,也叫参变量,是一个变量。 简单来说,参数就是你调用函数时,根据需要传入的变量。比如说,某个函数的作用是计算长方形的面积,那当你调用此函数时就要传入长方形的长和宽这两个变量,才能计算出你想要的结果。 Python 中的参数分为以下四种类型: 必需参数 关键字参数 默认参数 不定长参数 下面我将逐个介绍: 必需参数 必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。 例如,下面调用printme()函数,你必须传入一个参数,不然会出现语法错误: #可写函数说明 def printme ( str ) : "打印任何传入的字符串" print (str) return #调用printme函数 printme() 如果你不传参,调用以上代码输出的结果会报错: Traceback (most recent call last ): File "test.py"

箭头函数详解

允我心安 提交于 2019-12-06 14:19:40
ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 1.基础语法 通常函数的定义方法 var fn1 = function(a, b) { return a + b } function fn2(a, b) { return a + b } 使用ES6箭头函数语法定义函数,将原函数的“function”关键字和函数名都删掉,并使用“=>”连接参数列表和函数体。 var fn1 = (a, b) => { return a + b } (a, b) => { return a + b } 当函数参数只有一个,括号可以省略;但是没有参数时,括号不可以省略。 // 无参 var fn1 = function() {} var fn1 = () => {} // 单个参数 var fn2 = function(a) {} var fn2 = a => {} // 多个参数 var fn3 = function(a, b) {} var fn3 = (a, b) => {} // 可变参数 var fn4 = function(a, b, ...args) {} var fn4 = (a, b, ...args) => {} 箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种只包含一个表达式,省略掉了{ ... }和return

Vue 插槽详解

痞子三分冷 提交于 2019-12-06 13:24:00
原文链接 : https://www.cnblogs.com/chinabin1993/p/9115396.html Vue插槽,是学习vue中必不可少的一节,当初刚接触vue的时候,对这些掌握的一知半解,特别是作用域插槽一直没明白。 后面越来越发现插槽的好用。 分享一下插槽的一些知识吧。 分一下几点: 1、插槽内可以放置什么内容? 2、默认插槽 3、具名插槽 4、作用域插槽 一、插槽内容   一句话:插槽内可以是任意内容。    先看一下下面的代码:声明一个child-component组件,    如果现在我想在<child-component></child-component>内放置一些内容,结果会是怎样? <div id="app"> <child-component></child-component> </div> <script> Vue.component('child-component',{ template:` <div>Hello,World!</div> ` }) let vm = new Vue({ el:'#app', data:{ } }) </script>    <child-component>你好</child-component> 输出内容还是在组件中的内容,在 <child-component>内写的内容没起作用。 这就是插槽出现的作用

vue作用域插槽,你真的懂了吗?

情到浓时终转凉″ 提交于 2019-12-06 13:23:55
原文地址: https://www.jianshu.com/p/e10baeff888d 前言 在网上搜了很多关于作用域插槽的解释,感觉没有写得很具体的吧,我认为应该对组件化有很深的理解才会触及到这个问题,这里也分享下我自己对于slot-scope的一点理解。 slot大家看看文档都懂了,无非就是在子组件中挖个坑,坑里面放什么东西由父组件决定。 // 子组件 <template> <slot>来啊,我这里挖了个坑</slot> </template> // 父组件 <template> <child> <!-- 传入子组件的自定义内容,会填入到子组件的slot插槽中 --> <span>我在这放个span,乐意的话,放个组件都行</span> </child> </template> 给slot传入普通文本 slot传入普通文本 给slot传入了一个图像处理组件 slot传入组件 具名插槽也很简单,比如有多个插槽,我作为父组件,肯定想区别子组件中的几个插槽,那就要用slot标签的name属性来标识了,而父组件要决定在什么插槽里面放什么内容,就要将name的值赋值给slot属性传递给对应的插槽。如果slot没有name属性,就是匿名插槽了,而父组件中不指定slot属性的内容,就会被丢到匿名插槽中。 // 子组件 <template> <section> <slot name=

angular js中的directive

半世苍凉 提交于 2019-12-06 13:09:17
angular js中的自定义指令 自定义指令return如下指令定义对象: restrict:restrict约束自定义指令的使用形式,取值有A(属性),E(元素),C(类),M(注释) template:该属性指定angular js指令被替换为html模板 scope:scope:true 表示创建一个作用域,该作用域继承于父作用域(即ng-controller控制的作用域), scope:{} 创建一个完全孤立的作用域,不会继承父作用域的任何数据 scope:{"@"} 创建一个单向绑定的作用域,改变父作用域的数据会改变子作用域的数据,改变子作用域的数据不会改变父作用域的数据 scope:{"="} 创建一个双向绑定的子作用域 scope:{"&"} 创建一个与父作用域方法进行绑定的子作用域 controller:该属性用于指令之间的通信,在一个指令中定义方法和属性,以供其他的指令进行调用 <!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset="UTF-8"> <title>复习directive</title> <script type="text/javascript" src="../js/angular.js"></script> </head> <body ng-controller=

Rust 入门 (四)

不羁岁月 提交于 2019-12-06 12:56:58
所有权是 rust 语言独有的特性,它保证了在没有垃圾回收机制下的内存安全,所以理解 rust 的所有权是很有必要的。接下来,我们来讨论所有权和它的几个特性:借用、切片和内存结构。 什么是所有权 Rust 的核心特性是所有权。各种语言都有它们自己管理内存的方式,有些是使用垃圾回收机制,有些是手动管理内存,而 rust 使用的是所有权机制来管理内存。 所有权规则 所有权规则如下: rust 中的每个值都有一个自己的变量。 rust 值在同一时间只能绑定一个变量。 变量超出作用域,值会自动被销毁。 不懂没关系,跳过往后看。 变量作用域 rust 语言的变量作用域和其他语言是类似的,看例子: { // 变量 s 还没有被声明,s 在这里是无效的 let s = "hello"; // 变量 s 是这里声明的,从这里开始生效 // 从这里开始,可以使用 s 做一些工作 } // 变量 s 超出作用域,s 从这里开始不再生效 可以总结两点重要特性: 当变量 s 声明之后开始生效 当变量 s 出了作用域失效 String 类型 在章节三中学习的数据类型都是存储在内存的栈空间中,当它们的作用域结束时清空栈空间,我们现在学习一下内存的堆空间中存储的数据是在何时被 rust 清空的。 我们在这里使用 String 类型作为例子,当然只是简单的使用,具体的内容后文介绍。 let s = "hello"

函数的返回值和作用域

南笙酒味 提交于 2019-12-06 12:42:30
一、返回值return 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,即 return 语句代表着函数的结束 如果未在函数中指定return,那这个函数的返回值为None 二、全局变量和局部变量 在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。 全局变量作用域(即有效范围)是整个程序,局部变量作用域是定义该变量的函数。 变量的查找顺序是局部变量>全局变量 当全局变量与局部变量同名时,在定义局部变量的函数内,局部变量起作用;在其它地方全局变量起作用。 在函数里是不能直接修改全局变量的 在函数内如何修改全局变量: 在函数内声明全局变量: gloal 变量名 name = "aaa" def chang_name: 来源: https://www.cnblogs.com/nanjo4373977/p/11984516.html

js中的call和apply

吃可爱长大的小学妹 提交于 2019-12-06 12:23:52
1.每个函数都包含两个非继承而来的方法call()和apply() 2.相同点:作用一样,都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。 tip:A.call(B,x,y)就是把A的函数放到B中运行,x,y是A方法的参数 //可以理解成第一个参数是谁,this就指向谁 来源: https://www.cnblogs.com/white55k/p/11983424.html